Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
372 lines (281 sloc) 23.6 KB

Perl入学式

Perl入学式について

Perl入学式とは

  • 2011年度に大阪で開始された, プログラム初心者向けのPerl勉強会です.
  • 2012年度では東京, そして2013年度では福岡と, 3年目にして3大都市で開催!
  • 基本的に参加費無料, 受講者の負担が極力少ない形で行われています.
  • 隔月開催で年6回のカリキュラム, 出られない場合には奇数月に同じカリキュラムの補講が行われます(どちらに参加されてもOK).

2012年度のPerl入学式

  • 大阪と東京で(補講を含めて)毎月開催達成.
  • 講師とサポーターでより良い勉強会のあり方を考える.
  • 2012年度の参加者から今年度のサポーターになった方も若干名います.
  • 結果的に他のプログラム言語を含めてPerlの初心者向け勉強会としては一応成功に終わりました.

今年度のPerl入学式について

  • 受講者の負担が少ない形は維持していきます.
  • 受講者と運営側の交流を増やして, より楽しく勉強ができる機会を増やします.
  • 懇親会での交流促進. 懇親会への参加を昨年度より気軽にできるようにしました. 受講者の皆さんと, 講師・サポーター・運営側との交流の機会も増やします.

Perl入学式の使い方

  • 今流行のウェブアプリケーションを作ってみたいものの, 基礎から勉強したい人.
  • Perl以外の他の言語を学習することになったものの, 初心者を対象とした丁寧な勉強会が無いということでPerl入学式を利用してくださってもOKです.
  • 前年度までは, 他の言語を既に習熟した方がPerlを学習する際の補助的教材という位置付けで受講して下さった方もいらっしゃいました.
  • 皆さんの学びたい・作りたいをサポートします.

オンラインでのサポート

  • Perl入学式の公式ページ http://perl-entrance.org/
  • Twitterアカウント @Perl_Entrance
    • 公式ページやTiwtterアカウントでは, 開催日程などがアナウンスされます.
  • Twitterハッシュタグ #Perl入学式
    • 運営側がウォッチしているので, なにか疑問があればこれをつけて気軽に質問してみましょう
  • GitHubの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もほとんどのディストリビューションで標準装備しています.
    • 但しほとんどがPython2.
  • 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界隈の裏話が聴けたりも.

検索 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の導入

$ plenv install 5.20.2
  • 今回は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

$ plenv install-cpanm
  • 複雑な処理などを肩代わりしてくれる外部プログラムであるモジュールが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!

print "Hello, world!\n";
  • エディタにこのようなプログラムを書いて, hello.plという名前で保存しましょう.
    • Perlのスクリプトは.plという拡張子で保存することが多いです.
    • Sublime text2では, File -> Saveで保存できます.
    • 保存場所は、ホームディレクトリに保存します。
      • Macの場合 ~/hello.pl
  • printは, 端末に文字を出力する命令です.
    • \nは改行を意味します.
  • 文の最後にはセミコロン(;)を付けましょう. 文の区切りという意味です.
    • C言語を知っている方は馴染み深いでしょう.

スクリプトの実行

$ perl hello.pl
hello, world!
  • perlの引数に, 実行したいスクリプトファイル名を与えると, そのスクリプトを実行してくれます.

練習問題

  • print命令を複数個使って, あなたのプロフィール(名前, 年齢, 大学etc...)を表示するスクリプトを書いてみよう.
    • スクリプトの名前はprofile.plとして, 実行してみましょう.
    • print命令を複数書く場合にはセミコロンで文を区切りましょう.
    • セミコロンの後に改行を入れて複数の行にして読みやすくするのが通常です.

練習問題

  • print 5-2; とすると3が表示されます(ダブルクォートはしません). では, 2014からあなたの生年の西暦を引き算して, 満年齢を表示してみましょう.
    • ファイル名はage.plとして保存し, 実行しましょう.
    • 改行を入れる場合, セミコロンで文を分けて, 次に print "\n" を書くなど, 色々試してみましょう (色々な方法があります).