Perl入学式
Perl入学式について
Perl入学式とは
2011年度に大阪で開始された, プログラム初心者向けのPerl勉強会です.
2012年度では東京, そして2013年度では福岡と, 3年目にして3大都市で開催!
基本的に参加費無料, 受講者の負担が極力少ない形で行われています.
隔月開催で年6回のカリキュラム, 出られない場合には奇数月に同じカリキュラムの補講が行われます(どちらに参加されてもOK).
2012年度のPerl入学式
大阪と東京で(補講を含めて)毎月開催達成.
講師とサポーターでより良い勉強会のあり方を考える.
2012年度の参加者から今年度のサポーターになった方も若干名います.
結果的に他のプログラム言語を含めてPerlの初心者向け勉強会としては一応成功に終わりました.
今年度のPerl入学式について
受講者の負担が少ない形は維持していきます.
受講者と運営側の交流を増やして, より楽しく勉強ができる機会を増やします.
懇親会での交流促進. 懇親会への参加を昨年度より気軽にできるようにしました. 受講者の皆さんと, 講師・サポーター・運営側との交流の機会も増やします.
Perl入学式の使い方
今流行のウェブアプリケーションを作ってみたいものの, 基礎から勉強したい人.
Perl以外の他の言語を学習することになったものの, 初心者を対象とした丁寧な勉強会が無いということでPerl入学式を利用してくださってもOKです.
前年度までは, 他の言語を既に習熟した方がPerlを学習する際の補助的教材という位置付けで受講して下さった方もいらっしゃいました.
皆さんの学びたい・作りたいをサポートします.
オンラインでのサポート
Perlという言語について
Perlって何?
1987年, Larry Wall(右写真)が開発したプログラミング言語です.
Ruby, Python, PHPと並ぶLL言語(Lightweight Language)の一種になります.
C言語やsed(せど), awk(おーく)の影響を受けた動的型付け言語です.
後のRubyやPHPに影響を与えました.
「Perl」は言語そのもの, 「perl」はその処理系を示します.
Perlの特徴
Wikipediaの記事 から重要なものだけ引用します...
強力な文字列処理. 正規表現をサポート.
日本語をはじめとして世界中の言語を処理可能.
自由度の高い文法. 簡潔にプログラムを記述できる.
高い後方互換性を持つ.
数多くのオペレーティングシステムで利用可能.
プログラムの実行には事前コンパイルは不要.
有志によって開発された豊富なモジュール.
TMTOWTDI
Perlのスローガン. 「ティムトゥーディー」と読みます.
"There's more than one way to do it."
「やり方はひとつじゃない」.
Larryは「プログラミング言語は, いろんな対象をシンプルに記述する為にある程度複雑でなければならない」と信じています.
Perlは, 同じ意味を持つ処理をいろいろな書き方で表すことができます.
簡潔にプログラムを書ける
my $number = 123;
my $string = 'perl';
print $string . $numbrer . "\n";
動的型付け言語なので変数に型は存在しません.
my
というのはスコープの違いを示す. これは明示的に指示する必要があります.
C言語やJavaのような, 型のキャストなどは必要ありません.
よって, このように数値を格納した変数$number
と, 文字列を格納した変数$string
を直接文字列として結合(.
演算子によって)できます.
高い後方互換性
Perlのバージョンアップによって昔のスクリプトが動かなくなる, ということはほとんどありません.
もちろん, Perlもバージョンアップによる細かい機能変更はあります.
しかし, 基本的な処理については後方互換性が相当繊細なまでに維持されています.
Perl5 のバージョンの歴史
Perl4以前は前史として, 既に周囲に環境が存在しないと思って良いです.
Perl5.00x(xは数字)というバージョンでPerl5が登場しました. 1994年のことです.
Perl5.6が登場. 2000年. この頃からインターネットやウェブというものが徐々に一般に普及していきます.
Perl5.8が登場. 2002年. 国際化対応や今につながる様々な機能が搭載されます. 5.8時代が長かったため, 多くの企業等に長きにわたって使われ続けました.
Perl5 のバージョンの歴史
Perl5.10が登場. 2007年. 後方互換性を損ねない構文拡張等を行います.
Perl5.12が登場. 2010年.
Perl5.14が登場. 2011年.
Perl5.16が登場. 2012年.
Perl5.18が登場. 2013年. 2014年4月現在の最新の安定版. この講義もPerl5.18を使用します.
Perl5 のバージョンの歴史
5.(偶数) が安定版. 5.(奇数) が開発版です.
基本的に最新版の一つ手前の安定版までがサポート対象です.
Perl5.8時代が長かったので, 今もPerl5.8が生き残っている現場はあるものの, 今ならPerl5.10以降だけを考えれば良いです.
Perl5.10以降から5.18まで, Perl初学者にとって大きな違いはあまりありません.
様々な環境で使用可能
Linuxのほとんどのディストリビューションで標準装備となっています.
システムを管理する多くのツールがPerlで書かれているためです.
Pythonもほとんどのディストリビューションで標準装備しています.
Rubyを標準で装備するディストリビューションはまだ少ないです.
Macは標準装備, Mountain Lionは1.8, Mavericksは2.0.
豊富なモジュール
CPANと呼ばれるアーカイブに, 全世界のPerl Mongerがモジュールを投稿しています.
Perl Monger ... Perl使いのこと. RubyにおけるRubyist, PythonにおけるPythonistaと同義です.
例: Encode ... 文字列のエンコードを処理するモジュール.
例: Net::Twitter ... TwitterのAPIを操作するモジュール.
例: DBD::SQLite ... Perlから, SQLiteのデータベースを操作するモジュール.
余談: Perl6について
Perl5とは別に, Perl6も開発されています.
当初はPerl5の後継となるはずだったが, 後に「Perl5とは別に開発を進める」と公式に発表されました.
よって, Perl5の開発は継続されます.
また, 現在ではPerl6はPerl5とは別の言語とみなされている, と解説されることもあるほど互換性はありません. これはPerl5のバージョン間での互換性が最大限に保たれていることの裏返しでもあります.
現在の最新版は5.18.2, バージョンを確認する perl -v
では, Perl5のバージョン18.2と表記されます.
Perlのコミュニティ
世界各地にPerl Monger(PM)のコミュニティが存在します.
地域のPerl Mongrerコミュニティは, (地名).pmを名乗ることが多いです.
日本でも, 十数個のコミュニティ, 勉強会が開催されています.
地域コミュニティ
pm.orgに登録されている, 公認のコミュニティ.
Hokkaido.pm, Kushiro.pm, Sendai.pm, Niigata.pm, Tokyo.pm, Shibuya.pm, Yokohama.pm, Kamakura.pm, Nagoya.pm, Kansai.pm, Kyoto.pm, Fukuoka.pm
非公認のコミュニティ
Hachioji.pm, Namba.pm, ...
勉強会/イベント
Hokkaido.pm Casual, Perl Casual, Perl Beginners, Perl入学式, ...
YAPC::Asia Tokyo
YAPC ... Yet Another Perl Conference
年に一度行われる, 日本最大規模のPerlの祭典です.
今年は8月28日から30日の3日間開催です. YAPC::Asia Tokyo 2014 .
「There is more than one way to enjoy it!」.
Perlを使っている会社
LINE, DeNA, Seesaa, はてな, カヤック, mixi, Mobile Factory, FreakOut, GaiaXなどもPerlを活用しており, 優秀なPerl Mongerが数多く所属しています.
過去のYAPC::Asia Tokyoにスポンサーしていた会社はPerlを最大限に活用している, もしくは一部使っているか, Perlに対して興味を持っている企業です.
Perlを使ったサービスとしては, はてなの「はてなダイアリー」やLINEの「ライブドアブログ」, オモロキの「ボケて」などが有名です.
PerlとCGI
一時期, 「PerlでWebサービスを作るならCGI」という時代がありましたが, 今はそうではありません.
最近は, PSGI(Perl Web Server Gateway Interface)という仕様に対応したWAF(Web Application Framework)を使っての開発が増えています.
2014年現在, Perlの代表的かつ新規採用されやすいWAFとしては, MojoliciousやAmon2などがあります.
Perl入学式は「モダンなPerlを教える」という方針を取っていますので, CGIについては触れません.
より深く学ぶには?
勉強会への参加
地域.pm への参加.
Hokkaido.pm(札幌), Yokohama.pm(横浜), Kansai.pm(大阪), Kyoto.pm(京都), Fukuoka.pm(福岡), Namba.pm(PM非公式, 難波), Hachioji.pm(PM非公式, 八王子).
他のPerlの勉強会も活発.
Hokkaido.pm Casual(毎月第3水曜日, 札幌), Perl Casual(東京, 不定期), PerlBeginners(東京, だいたい隔月), Perl入学式(今参加しているコレ)
勉強会への参加
その他, 草の根でPerlの勉強会は多く催されています. 探すツールは結構多い.
難しい内容かもしれないので不安
参加するだけなら怖くありません.
参加費も無料, もしくは会場費の割勘程度.
こんな世界もあるんだ〜程度に聴講すると, 数年後にふと繋がることもある.
懇親会に参加して盛り上がると, さらに業界やPerl界隈の裏話が聴けたりも.
検索 vs 書籍
最近は検索(ググる)ことで解決することも多い.
ただそれだと体系的な勉強は出来ないので, 何らかの書籍を通読するのがオススメ.
書籍の最大の欠点は, 情報の陳腐化の影響をもろに受けること.
また(書籍もそうだけれど, それより)ネットの情報は玉石混交.
最初は誰しも記号から分からないので, ググるにも手がかりが無い (perldoc -v
/ perldoc.jp を活用しましょう).
おすすめの書籍は人それぞれ.
オススメの書籍
「プログラミングPerl」(通称: ラクダ本). プログラミング未経験の初心者にはハードルが高い. 時期が来るまで買うのを待っても良い.
「初めてのPerl」(通称: リャマ本). 若干プログラミング初心者向け. オライリーの文体に慣れていないと多少厳しいかも.
オススメの書籍
「モダンPerl入門」2009年刊行. 今だと若干モダンではない記述もある. 増補改訂版の予定 もあるらしいので期待.
「CPANモジュールガイド」CPANモジュールのガイド本. Perlの可能性を知るだけでも良書.
「雅なPerl」2013年刊行. 同人誌, とはいえ初心者向けという意味ではかなり秀逸な解説をしている.
その他, 様々な対象者や内容の書籍がたくさんありますが, 割愛.
ネットウォッチとTwitter
ここ数年はTwitterでPerlの情報を流す人をフォローしておけば, 目的の情報が手に入る時代になった. 昔ほどRSSフィードリーダーが必須ではなくなった.
著名なPerl Mongerは数多いので, 検索すれば出てくるはず.
自分の興味のあるジャンルに携わっている人をフォローしておくとよい.
Twitterで質問をつぶやけば, 誰かが助言してくれることも多数. #Perl入学式 のハッシュタグも活用してください.
最新情報はウェブでゲットする
今はまだ難しいとしても, 勉強が進んだら情報のアンテナを張ってみるのがオススメ.
最新情報は書籍ではなくネット発. その時にウォッチできる状態, またはそれをググれるキーワードを持っておく事は大事.
最新情報はウェブでゲットする
記号の勉強などを抜けだしたら, いよいよ検索して先人の知恵を拝借する
ネットの情報は玉石混交なので, 実際にPerl Mongerと対面できる勉強会・懇親会の場も重要だし, 本当の 最新情報はそこから入る場合もある.
このPerl入学式という場も, そういう最新のPerlをお伝えする場でありたいです.
Perl環境の構築
システムPerlとユーザPerl
MacやLinuxなどの多くのシステムには最初からPerlが入っています。このPerlのことを システムPerl と呼びます.
もちろんシステムPerlをそのまま使っても良いのですが、今後モジュールを入れたりする際にシステムPerlの環境を汚すことを避けるために、自分専用のPerl環境, すなわち ユーザPerl を構築することが最近の主流です
今回はユーザPerl構築環境の一つ plenv を導入していきましょう
システムPerlは使わないの?
最近のOSのシステムPerlのバージョンは新しいので、システムPerlで事足りる作業も多いです.
実はこのPerl入学式でも第5回目くらいまではシステムPerlで事足ります.
ただ今後のことを考えてユーザPerlの構築を学んでいきましょう.
Ubuntuではapt
によって、整合性のとれたシステムPerlへのPerlモジュール導入ができるので、apt
で手に入るモジュールであれば、これでまかなうのもありでしょう.
plenvの導入準備
$ sudo apt-get install git curl build-essential ### Ubuntuのみ
Ubuntuでは初期状態にgit
コマンドなどが入っていないのでapt-get
で導入します
Macの場合は初期状態で入っているgit
コマンドが使えます
MacでPerl環境を構築するためのその他のコマンドは、先ほどのXcodeで完了しています
plenvの導入
$ curl -L http://is.gd/plenvsetup | bash
ここでは, @ytnobody さんが作成した、plenv
簡単導入プログラム を使います.
上記のコマンドを打って下さい. しばらくかかるので気長に待ちましょう.
終わったら、exit
して端末を開き直すか、source ~/.bash_profile
を実行してシェルの設定を読み直してください。
plenv
と打って、ヘルプが出たら成功です. which plenv
などとして、plenv
コマンドの場所を確認してみましょう.
簡単インストールコマンド詳細を確認したい方は curl -L http://is.gd/plenvsetup | less
など打ってみましょう.
plenvでのperlの導入
今回は2015年3月時点での最新の安定版 perl-5.20.2
を導入します.
これも時間がかかるので気長に待ちましょう.
plenvでのperlの導入
$ plenv versions
* system (set by /home/username/.plenv/version)
5.20.2
plenv versions
で, 導入したPerl の一覧が見られます. *
が付いているのが現在選択されているperlで, plenv
導入直前はシステムPerlが選択されているはずです.
plenvでのperlの導入
$ plenv global 5.20.2
$ plenv versions
system
* 5.20.2 (set by /home/username/.plenv/version)
plenv global
コマンドで, 使うperlを切り替えることができます.
現在有効なperlの確認
$ plenv version
$ 5.20.2 (set by /home/ogata/.plenv/version)
plenv version
コマンドの他に、perl -v
として実際にパスが通っている perl
コマンドのバージョン情報を見るのが確実でしょう.
現在有効なperlの確認
$ perl -v
his is perl 5, version 20, subversion 2 (v5.20.2) built for darwin-2level
(以下略)
今後は原則的に, plenv
で作成したユーザPerlを使っていきます.
plenv その他
plenv global system
と打つと, 現在のPerlをシステムPerlに戻すことができます.
plenv
とだけ打つと, 使えるコマンドの一部の説明が出力されます.
局所的な場所だけ違うバージョンのPerlを使う plenv local
というものもありますが, 今回は plenv global
だけ使います.
モジュールとCPAN
複雑な処理などを肩代わりしてくれる外部プログラムであるモジュール がPerlには豊富に用意されています
PerlのモジュールはCPAN (シーパン)という場所に集められていて, 誰もが自由に使うことができます.
インストールはネットワーク経由で行うことができ, そのためのコマンドcpanm
が用意されています.
上記コマンドでplenv
からcpanm
を導入することが出来るので, やってみましょう.
モジュールを活用していこう
Perlには最初から搭載されて使用できるモジュールも存在して, コアモジュールと呼ばれます
cpanm
コマンドを使って, CPANから外部モジュールを入れることも簡単にできます
多くのモジュールを組み合わせて活用すれば, 様々な複雑な処理や自分一人では書ききれない処理を簡単に書くことができます.
ワンライナー
$ perl -E 'say "Hello World!";'
Hello World!
$ perl -E 'say 12+23;'
35
perl
コマンドでは -e
もしくは -E
の後に直接プログラムを書いて実行することができます.
この他に -M
オプションを使うことでモジュールを使う(use
する)ことができます
ワンライナーとモジュール
$ perl -MTerm::ANSIColor -E 'say colored("Hello World!", "bold blue");'
Term::ANSIColor
モジュールを使って文字を色付きで表示させてみましょう.
Term::ANSIColor
はコアモジュールなので, どこでも使うことができます.
perldocとドキュメント
$ perldoc Term::ANSIColor
使い方は perldoc Term::ANSIColor
と打つと読めます (英語ですが). colored
というサブルーチンが使えることがここでわかります.
モジュールには使い方のドキュメントがついていて、perldoc
コマンドで読むことができます.
実際にエディタを使ってPerlプログラムを書いていく際は, これらのモジュールを use
を使って読み出します.
FizzBuzz問題とAcme
Acme::FizzBuzz
というモジュールを使って, FizzBuzz問題を自動で解いてみます.
FizzBuzz問題とは, 数字が3で割り切れたらFizzを, 数字が5で割り切れたらBuzzを, 数字が3でも5でも割り切れたらFizzBuzzを, そうでなければ数字を出力するプログラムのことです.
Acme
というのは, CPANにおいてジョークなモジュールの為に用意された名前空間です.
ルーニー・テューンズのロードランナーの中に出てくる, コヨーテに怪しい商品を売るAcme社から来ている... らしい.
モジュールをインストールしてみよう
$ cpanm Acme::FizzBuzz
$ perl -MAcme::FizzBuzz -E ''
インストールが完了したら、あとはこのモジュールを読み込むだけでFizzBuzz問題を解決してくれます!
PerlとモジュールとCPANの世界
CPANには, ジョークのようなモジュールから, ウェブプログラミングを支援するためのモジュール, TwitterやFacebookなどにアクセスして情報を取得するためのモジュールなど, ありとあらゆるものがあります.
あなたの趣味や仕事を助けてくれるモジュールがきっとあるはずです. CPANを検索して自分が必要な処理を肩代わりするモジュールを使うことができるレベルまで, まずは少しずつPerlを勉強していきましょう.
Hello, World!
最初のプログラム
どのプログラミング言語でも, 最初に解説されるのは「Hello, World! と表示するプログラム」であることが多いです.
というわけで, 先ほど構築したPerl環境を使って, Hello, World! を表示するPerlプログラムに挑戦してみましょう.
これは端末上に Hello, World!
という文字列を表示するプログラムです.
Hello, world!
エディタにこのようなプログラムを書いて, hello.pl
という名前で保存しましょう.
Perlのスクリプトは.pl
という拡張子で保存することが多いです.
Sublime text2では, File
-> Save
で保存できます.
保存場所は、ホームディレクトリに保存します。
print
は, 端末に文字を出力する命令です.
文の最後にはセミコロン(;
)を付けましょう. 文の区切りという意味です.
スクリプトの実行
$ perl hello.pl
hello, world!
perl
の引数に, 実行したいスクリプトファイル名を与えると, そのスクリプトを実行してくれます.
練習問題
print命令を複数個使って, あなたのプロフィール(名前, 年齢, 大学etc...)を表示するスクリプトを書いてみよう.
スクリプトの名前はprofile.pl
として, 実行してみましょう.
print命令を複数書く場合にはセミコロンで文を区切りましょう.
セミコロンの後に改行を入れて複数の行にして読みやすくするのが通常です.
練習問題
print 5-2; とすると3が表示されます(ダブルクォートはしません). では, 2014からあなたの生年の西暦を引き算して, 満年齢を表示してみましょう.
ファイル名はage.pl
として保存し, 実行しましょう.
改行を入れる場合, セミコロンで文を分けて, 次に print "\n"
を書くなど, 色々試してみましょう (色々な方法があります).