Catalystのモジュールとか
__PACKAGE__と$selfの関係
warn __PACKAGE__; warn $self;
結果
Hoge::App::Fuga::Controller::Class名 Hoge::App::Fuga::Controller::Class名=HASH(0xd2694a0)
Catalyst::Base
This used to be the base class for Catalyst Controllers. It remains here for compatibility reasons, but its use is highly deprecated.
if your application produces a warning, then please update your application to inherit from Catalyst::Controller instead.
Catalyst ControllersのBase Classとして使用される。互換上の理由から残り続けるが、使用するのは非推奨である。
もし開発しているアプリケーションが警告を出したら、Catalyst::Controller を代わりに受け継ぐためにアプリケーションをアップデートしてください。
App::Schema
DBIx::Class::Schema::Loaderによって作られたファイル。__PACKAGE__->load_classesをwarn出力しても空文字しか出力されないが、なければSchemaを呼び出せない。
DBIx::Class::Schema::Loader
DBIx::Class::Schema::Loader - Create a DBIx::Class::Schema based on a database
DBIx::Class::Schemaに基づいてSchemaを作成する。
スキーマとは、データベースにどのような種類のデータをどのような構造で格納するか定義したもののことを指す。テーブルの名前と各カラムの名前とタイプを定義する。
DBIx::Class::Schema - composable schemas
Creates database classes based on a schema. This is the recommended way to use DBIx::Class and allows you to use more than one concurrent connection with your classes.
スキーマに基づいてデータベースを作成する。DBIx::Classを使用するための推奨される方法であり、クラスとの複数の同時接続を可能にする。
DBIx::Class - Extensible and flexible object <-> relational mapper.
DBIx::Class needs to know what your Table structure looks like. You do that by defining Result classes. Result classes are defined by calling methods proxied to DBIx::Class::ResultSource. Each Result class defines one Table, which defines the Columns it has, along with any Relationships it has to other tables. (And oh, so much more besides) The important thing to understand:
DBIx::Classはテーブルの構造がどのようになっているかを知っておく必要がある。Result classesを定義することによってそれを実現できる。Result classesはDBIx::Class::ResultSourceにプロキシされたメソッドを呼び出すことで定義される。それぞれのResult classは、他のテーブルとの関係やカラムがどのようになっているか定義する。理解するのが重要だ。
DBIx::Class::ResultSet - Represents a query used for fetching a set of results.
A ResultSet is an object which stores a set of conditions representing a query. It is the backbone of DBIx::Class (i.e. the really important/useful bit).
No SQL is executed on the database when a ResultSet is created, it just stores all the conditions needed to create the query.
A basic ResultSet representing the data of an entire table is returned by calling resultset on a DBIx::Class::Schema and passing in a Source name.
ResultSetは、クエリを表す一連の条件を用意するオブジェクトである。ResultSetはDBIx::Classにとって非常に重要な存在である。ResultSetが作られる時、データベースで実行されるSQLはない。ResultSetはクエリを作るのに必要全ての条件を用意する。基本的なResultSetは、DBIx::Class::SchemaでResultSetを呼んだり、ソースネームをパスすることによって全テーブルのデータを表す。
Catalyst::Plugin::ConfigLoader - Load config files of various types
This module will attempt to load find and load a configuration file of various types. Currently it supports YAML, JSON, XML, INI and Perl formats.
このモジュールは、様々なタイプの設定ファイルをロードすることを試みる。現在はYAML、JSON,、XML、 INI、Perlをサポートしている。
load_config
This method handles loading the configuration data into the Catalyst context object. It does not return a value.
load_configメソッドは、Catalyst context objectへの設定データをロードする。値は返さない。
コンテキストオブジェクト
$contextオブジェクトはApplication内の全ての場所からアクセス可能なオブジェクトである。コンテキストオブジェクトはアクションの第2引数として必ず渡される。$cと略される。
extends
extends 'Animal'; # Animalクラスを継承
継承
継承(けいしょう、inheritance:インヘリタンス)とはオブジェクト指向を構成する概念の一つである。あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。
主にクラスベースのオブジェクト指向言語で、既存クラスの機能、構造を共有する新たなクラスを派生することができ(サブクラス化)、そのようなクラスは「親クラス(スーパークラス)を継承した」という。具体的には変数定義や操作(メソッド)などが引き継がれる。継承は、「コードの再利用性」や「拡張性」を高めるための有効な手段となる。
カプセル化
情報(フィールド)や操作(メソッド)についてアクセス制御をかけることにより、悪意や間違いによる利用を防止し、想定しない利用が発生したならば、その原因箇所を特定しやすくするために仕組み化すること。
mysql コマンド集
特定のカラムのレコード数を取得する
select count(フィールド名) from テーブル名; select count(id) from user;
用語集
I18N
ソフトウェアである限られた言語でしか使えない状態から多言語が使えるように対応すること。国際化。internationalization。internationalization は,i で始まり n で終わる間に18文字あるから,i18n。
ローカライゼーション
Linuxは商用OSに匹敵する「国際化」がほどこされている。国の環境に最適化することを「ローカライゼーション」という。Linuxではローカライゼーションの対象として日本語ももちろんサポートされている。
CLI
キーボード等からの文字列を入力とし、文字列が表示されるウィンドウや古くはラインプリンタで印字される文字などを出力とする、ユーザインタフェースの様式である。
EC2 / AMI
EC2
概要
EC2とはAWSが提供する「仮想サーバ」である。OSではない。LinuxやWindows 、Red Hat等様々なOSの仮想サーバをすぐに実行できる環境が用意することができる。普通のレンタルサーバのようにSSHでログインしていろんなアプリケーションをインストールすることができる。
普通のレンタルサーバと違う点は、細かい時間単位で利用料金が発生する点である。 仮想サーバで有名なさくらインターネットは1000円/月ですが、Amazon EC2では数円/時からです。 常時起動しているとさくらインターネットの方が少し安いが、時間単位の柔軟な運用体制、 急なアクセス数増加にも耐えられる堅牢はインフラが、EC2の最大の特徴であると言える。
Amazon EC2では、Amazon EC2上で実行される仮想マシンのことを「インスタンス」と呼び、インスタンス という単位で構築することができる。インスタンスは複数のタイプが用意されていて、例えば、smallタイプのインスタンスであれば、CPU1、メモリ1GBのようにCPUとメモリが固定されている。CPUだけ追加とか、メモリだけ追加とかはできず、スペックを上げたい場合はインスタンスのタイプを変更する必要がある。
サーバインスタンスは必要に応じ作成、実行および停止が可能で、起動サーバの使用時間に応じ対価を支払うため"elastic"と呼ばれる。サーバインスタンス同士を隔離されたゾーンに作成すると障害時は相互にバックアップとなり、ダウンタイム最小化構成が可能である。
仮想サーバ
仮想サーバーは、名前の通り実際には存在しないサーバーをソフトウェア上で存在させて利用する仕組みである。1台のサーバが複数のサーバのように振る舞うことができるようになり、ユーザからは、実際に複数のサーバを活用しているかのように見える。ベースとなる1台のサーバを「物理サーバ」、仮想化されたサーバを「仮想サーバ」と呼ぶ。
実際のサーバーに仮想化ソフトウェアと呼ばれるソフトウェアをインストールし、そのソフトウェアによって仮想サーバーを作るという仕組みになっている。基本的にひとつのサーバーにはひとつのOSしか入れる事ができないが、仮想サーバーを利用する事で現実に存在するサーバーがひとつだとしても、複数のOSをインストールしたサーバーを利用可能になる。
AMI
Amazon マシンイメージ (AMI) は、クラウドの仮想サーバーであるインスタンスを起動するのに必要なOSやボリュームの情報、アプリケーションなどを含むインスタンスの起動テンプレートのこと。インスタンスを立ち上げる際は必ずAMIを指定して起動する必要がある。同じ設定で複数のインスタンスが必要な場合は、1 つの AMI から複数のインスタンスを起動できる。さまざまな設定のインスタンスが必要なときは、各インスタンスをそれぞれ異なる AMI から起動できる。AMI には次が含まれている。
インスタンスのルートボリュームのテンプレート (オペレーティングシステム、アプリケーションサーバー、アプリケーションなど)、起動許可 (AMI を使用してインスタンスを起動する権限を特定の AWS アカウントに与える)、インスタンスの起動時にインスタンスにアタッチするボリュームを指定するブロックデバイスマッピングである。
Amazon Linux
Amazon LinuxとはAmazon社が開発したRed Hat Enterprise LinuxベースのディストリビューションでEC2インスタンスを作成するときに選択可能なAMI(Amazon Machine Image)のひとつである。
Linux ディレクトリ構成
/
ルートディレクトリのこと。ルートディレクトリとは、コンピュータファイルシステムにおいて、ファイル階層における最初または最上位のディレクトリのことである。ルートディレクトリは、全ての枝の開始点である木の幹に例えることができる。ルートファイルシステムは、ルートディレクトリが位置しているのと同じディスクパーティションに含まれるファイルシステムである。ルートファイルシステムは、システムのブート時にマウントされる他の全てのファイルシステムの頂点にあるファイルシステムである。
/bin
$ ls /bin [ chmod date domainname expr ksh ln mv pwd sh sync unlink bash cp dd echo hostname launchctl ls pax rm sleep tcsh wait4path cat csh df ed kill link mkdir ps rmdir stty test zsh
/home
一般ユーザーのホームディレクトリ。ホームディレクトリとは、UNIX系のOS(LinuxとかMacとか)においてログイン直後にいる場所のことである。利用者は自分に割り当てられたホームディレクトリ内には自由にファイルやサブディレクトリを作成することができる。ログインするとカレントディレクトリ(ファイルシステム内での現在地)が自分のホームディレクトリに設定されることが多い。多くのシェルでは「~」(チルダ)という記号が自分のホームディレクトリを表している。
/etc
/etcは,Linuxディストリビューションを構成する各種プログラムの設定ファイルを格納したディレクトリである。
afpovertcp.cfg emond.d manpaths periodic security aliases find.codes manpaths.d pf.anchors services aliases.db fstab.hd master.passwd pf.conf shells apache2 ftpusers my.conf pf.os snmp asl gettytab nanorc php-fpm.conf.default ssh asl.conf group networks php-fpm.d ssl auto_home hosts newsyslog.conf php.ini.default sudo_lecture auto_master hosts.equiv newsyslog.d postfix sudoers autofs.conf irbrc nfs.conf ppp sudoers.d bashrc kern_loader.conf notify.conf profile syslog.conf bashrc_Apple_Terminal krb5.keytab ntp-restrict.conf protocols ttys com.apple.screensharing.agent.launchd localtime ntp.conf racoon wfs csh.cshrc locate.rc ntp_opendirectory.conf rc.common xtab csh.login mach_init.d openldap rc.netboot zprofile csh.logout mach_init_per_login_session.d pam.d resolv.conf zshrc cups mach_init_per_user.d passwd rmtab defaults mail.rc paths rpc dnsextd.conf man.conf paths.d rtadvd.conf
/etcに格納されている設定ファイルは,大きく6種類に分類できる。(1)Linuxシステムの起動に関するもの(2)システム設定全般に関連するもの(3)ネットワーク設定(4)サーバー・ソフトウエアに関する設定(5)X Window Systemの設定(6)シェルやアプリケーション・ソフトウエアに関する設定である。
/usr
ユーザーサービスやリソースが格納されるディレクトリ。その用途は多様であり、さまざまなものがここに格納される。共有可能なファイルは基本的にここに置かれる。各ユーザーが共通して利用するプログラム・ライブラリのデータであり、ソースからコンパイルしたソフトなどはこちらにインストールされる。通常パッケージの追加するこのディレクトリにインストールされることが多い。また、etcに保存されている設定ファイルのシンボルリンクもこちらに貼られることも多い。
X11 X11R6 bin include lib libexec local sbin share standalone
/sbin
再起動やファイルシステムの操作などシステム管理者用のコマンドが配置されている。/bin同様、新しいコマンドの追加や変更は推奨されない。shutdown、rebootなど。
apfs_hfs_convert fsck_apfs fstyp_msdos md5 mount_devfs mount_smbfs newfs_udf reboot autodiskmount fsck_cs fstyp_ntfs mknod mount_exfat mount_udf nfsd route disklabel fsck_exfat fstyp_udf mount mount_fdesc mount_webdav nfsiod rtsol dmesg fsck_hfs halt mount_acfs mount_ftp mpioutil nologin shutdown dynamic_pager fsck_msdos ifconfig mount_afp mount_hfs newfs_apfs pfctl umount emond fsck_udf kextload mount_apfs mount_msdos newfs_exfat ping fibreconfig fstyp kextunload mount_cd9660 mount_nfs newfs_hfs ping6 fsck fstyp_hfs launchd mount_cddafs mount_ntfs newfs_msdos quotacheck
/tmp
テンポラリデータの保存場所でメモリ上の一時ファイルを保存する。ダウンロードフォルダとして利用することもある。再起動時に消去される。また通常はcronで定期的に消去される。
/var
ログやキャッシュなど、可変的システムデータ(動的ファイル)が格納されるディレクトリである。一時的なデータとしては/tmpと同じだが、こちらは再起動しても消去されずに残る。
agentx audit db folders jabberd log mail netboot root run spool vm at backups empty install lib ma msgs networkd rpc rwho tmp yp
/opt
ディレクトリ内にはユーザーがインストールした静的データ、主にプログラムが格納される。ただしGNUビルドシステムやパッケージ管理システムを利用したインストールの場合、/usr/localもしくは/usrディレクトリにインストールされるので、専らソフトウェア・ベンダーが提供するアプリケーションであることが多い。
/dev
コンピューターに接続されたデバイス(マウスやキーボード、ディスク等)を扱うファイルが置かれている。
/lib
/binや/sbinのコマンドを実行するのに必要なファイルが配置されてる。基本的にユーザーが変更を加えることはない。64bit用の共用ファイルは別途「lib64」というディレクトリにある。32bitと間違えないように注意。libc、libsslなど。
/boot
ブートに必要なファイルが格納されるディレクトリ。ブートログやカーネルイメージ(Linuxカーネルを格納して圧縮したファイル)が保存されている。vmlinuzなど。ブートとは、コンピュータシステムの電源投入時、あるいはシステムのリセット後、モニタやOSなどなんらかの基本的なシステムソフトウェアを主記憶に展開し、ユーザプログラムを実行できるようにするまでの処理の流れのことである。
/lost+found
システムのバックアップや復元用のファイルが格納されるディレクトリである。意図しない再起動やシャットダウン時に使われる。通常ユーザーが操作することは無い。
/proc
/procは,プロセスやメモリーなどのLinuxシステム上のリソース関連情報を、あたかもファイルであるかのように配置した仮想的なファイル・システムである。仮想的とはいえ、通常のファイルと同じようにアクセスできる。/procディレクトリにあるサブディレクトリの名前(数字)は,プロセスIDを意味する。
/procにあるcpuinfo(CPUの情報)や、partitions(パーティション情報)、uptime(システムの駆動情報)、version(Linuxカーネルのバージョン情報)などのファイルの値は、他のコマンドが情報を出力する際に直接参照されている。これらの値の実態は,稼働中のLinuxカーネルの内部情報である。例えば、/proc/sys以下には,システムの動作速度に関する情報がファイルとして配置されている。これらのファイルの内容を書き換えることで,カーネル内部の変数を変更できる。
/sys
動作しているプロセスやドライバを/procで管理すると膨大になるため、/sysにドライバ関連のプロセスをまとめているディレクトリ。しかし完全に分離されているわけではない。
ポート番号関連
ポート番号
実際TCPやUDPで通信を行うときは、コンピュータ一台という単位ではなく「プログラム単位」つまり「プロセスやスレッド単位」で通信が行われる。そのためプロセス同士、正しく受け渡しをする必要がある。このとき通信しているプロセスには「ポート番号」というものが割り振られる。プロセスやスレッドはこのポート番号を目印にして、どのアプリケーションとどのアプリケーションが通信をとっているのかを判別することになる。
IPアドレスを建物の住所に例えるなら、ポート番号は「部屋の番号は何号室か?」という例えになる。コンピュータネットワークにおいて、プロトコル、IPアドレスとポート番号はまとめると、「どのような方法」で「どこ」の「何号室」に通信をとるのか?という形にいいかえることが出来る。それぞれ「どの様なプロトコルがどの様なポート番号で運用されるのか?」代表的な例をあげると次のようになる。
ポート番号 | 名称 |
---|---|
TCP 20 | FTP (データ) |
TCP 21 | FTP (制御) |
TCP 22 | SSH |
TCP 23 | Telnet |
TCP 25 | SMTP |
UDP 53 | DNS |
UDP 67 | DHCP(サーバ) |
UDP 68 | DHCP(クライアント) |
TCP 80 | HTTP |
TCP 110 | POP3 |
UDP 123 | NTP |
TCP 443 | HTTPS |
ウェルノウンポート番号
ポート自体は0から65535まで存在するが、そのなかでも0~1023までを「ウェルノウンポート番号」という。これらはIANAという団体により管理されている。TCP/IPやUDPにおいて通信で利用されるポート番号のうち、メジャーなサービスやプロトコルが利用するために予約されているポート番号のことである。80がHTTP、22がSSHとあるように、メジャーなサービスはポート番号が一般的に決め打ちされている。
レジスタードポート番号
ポート番号1024~49151もIANAで管理されている。特定のアプリケーションなどが使用することになっているポート郡である。IANAが登録を受け付け、公開している。
その他のポート番号
49152~65535はユーザが自由にとりあつかえるポート番号となっている。IANAに登録をする必要もない。ポート番号に関しては、実際どのサービスをどのポートで動かすかという絶対的な決まり事が存在するわけではないので、任意で管理、わりふって使用することも出来る。
lsof
lsof(エルエスオーエフ)コマンドは"list open files"の意味であり、多くのUnix系オペレーティングシステムで、オープン中のファイルやそのファイルをオープンしているプロセスのリストを出力するコマンドである。lsofの出力は以下の内容を表している。
そのファイルをオープンしているプロセスのID(PID) そのプロセスのグループID(PGID)(オプション) 親プロセスのプロセスID(PPID)(オプション) プロセスが実行しているコマンド プロセスのオーナー プロセスが使用している、実行中のテキストファイルおよび共有ライブラリを含む、すべてのファイルのそれぞれに対して以下の項目を表示する 可能なら、そのファイルのファイル記述子の数 ファイルのアクセスモード ファイルのロック状態 ファイルのデバイス数 ファイルのinode数 ファイルのサイズまたはオフセット ファイルが格納されているファイルシステムの名前 ファイルのパス名の利用可能なすべてのコンポーネント ファイルのストリームコンポーネントの名前 ファイルのローカルおよびリモートのネットワークアドレス ファイルのTLIネットワーク(主にUDP)の状態 ファイルのTCPの状態、読み込みキューの長さ、および、書き込みキューの長さ ファイルのTCPウィンドウの読み込みおよび書き込みの長さ(Solarisのみ) その他のファイルまたはファイルタイプ固有の値
netstat
netstatは、ネットワーク接続、ルーティングテーブル、各種ネットワークインタフェースの統計情報などを表示するコマンド行ツールである。ネットワークに関わる問題を探したり、トラフィック量を調べて性能を測定するといった用途に使う。
ルーティング
ルーティングあるいは経路制御とは、データを目的地まで送信するために、コンピュータネットワーク上のデータ配送経路を決定する制御の事である。OSI参照モデルのネットワーク層(第3層)の中継機器がこの制御を担っている。ルーティングを行うための通信プロトコルを「ルーティングプロトコル」という。経路が判明すれば、その経路に沿って、発信元から最終的な受取先へ、結節点またはノード(ここではルータと呼ばれる)を経由しながら転送を繰り返して情報が送られる。
情報はパケット(小包の意。データをある程度の量ずつに小分けして送信する、その一単位)として送られ、各パケットには論理的なアドレスが付加してある。各ルータはルーティングテーブルという表を保持しており、この表に従ってパケットの転送先を決定する。
ルーティングテーブル
コンピュータネットワークにおけるルーティングテーブルとは、ルーターやネットワーク接続されたコンピュータが持つ、個々のネットワークの宛先への経路の一覧を保持しているテーブル状のデータ構造である。
ss
「ss」コマンドは、ネットワーク通信で利用する「ソケット」についての情報などを出力するコマンドで ある。従来はnetstatコマンドが使用されていたが、現在はssコマンドへの移行が進んでいる。
FTP/SFTP/SCP
FTP
概要
FTP(File Transfer Protocol)はサーバーとクライアント間で、ファイルを送受信する通信の決まりごと(プロトコル)である。FTPという用語だけで、本来の意味である通信方法以外にも、FTPサーバーやFTPクライアント(ソフト)など、多用な意味を持って語られることが多い。FTPサーバーはインターネット側に位置し、Webサーバーとつながっているので、FTPサーバーを操作することによりWebサーバー内のファイルを制御できる。FTPにはサーバー側にもクライアント側にも、PIとDTPという専門的なプログラムが含まれている。
SFTP
SCP
概要
Secure Copy(scp)は、sftp同様、Secure Shell(ssh)に含まれるsshの機能を使ってセキュリティの高い(セキュアな)ファイル転送を行うコマンドの 1 つである。scpで使用される通信プロトコルは、Secure Copy Protocol(SCP)と呼ばれる。
認証情報(たとえばパスワード認証なら、ユーザー名やパスワード)と、セッション中でやり取りされるデータとの両方ともが、暗号化されてネットワーク上を流れる。Unixで古くから使われているリモートファイル転送コマンドrcp(Remote CoPy)のセキュアなバージョンといえる。コマンドラインの指定方法はrcpとほぼ同じである。rcpは暗号化などに対応しておらず、安全ではない。ある種のシステムではrcpという名前で起動しようとするとscpコマンドを実行する。
ssh-agentコマンドなどと組み合わせて利用すれば、コピー時に認証情報の入力が不要で、cpやrcp同様に利用できる。SSHを介してファイル転送を行うプロトコルとしてはSSH File Transfer Protocol(以下SFTP)があり、両者はしばしば比較される。その際、SCPはより軽く、SFTPはより高機能と表されることがある。