相変わらず聴講者としてですが、YAPC::TOKYO 2019 に行ってきました。沖縄は行かなかったので、YAPC::Fukuoka以来ほぼ2年ぶりのYAPCでした。登壇者の想いがヒシヒシと伝わってくる発表の数々で久々に熱くなってきました。最後は感動の一幕もあり、やっぱりYAPCはいいなあと改めて思いました。すごく楽しかったです。 残念ながら、私自身は「日本人カンファレンス真面目に聞きすぎ問題」の例に漏れずマジメに聞いてただけではありましたが(しかも懇親会も出てない…)、聞かせてもらった発表についてつらつら書いておきます。
2019年冬のPerl
perl_2019_winter - Speaker Deck
5.28や5.30、そしてPerl6といった最近のPerl動向まとめ。もはやこれを聞かないとYAPC感が出ない!ということでしっかり聞かせていただきました。ただ、個人的には、主戦場がCentOS7であり基本5.16から進む予定がしばらく無いので宝の持ち腐れ感は否めないのですが… でもいつかはno dot in @INC (v5.26)問題みたいなことと対峙するかもしれないし、知っておくことは重要ですよね。
そして、毎回出てくる話ですが、CPANコミッタが減っている問題はやはり厳しいようです… 今後どうなるのかなあ… Perl6の時代来るのかなあ… など、遠い目になってみたりしました。
Perl to Go
今日の資料は手直ししていつかあげます! #yapcjapan
— さいくろん (@xaicron) 2019年1月26日
資料はいつか上げていただけるようです。
Perlを書いてきた人がGoでWebアプリケーションを書くための入門講座的なお話でした。「Goは良い」とよく聞くものの、ほとんど触ったことのない自分にとってありがたすぎるお話でした。Goのメリットや注意点がものすごく分かりやすくまとまっており、Goを書いてみたくなる発表でした。以下、粗メモ、間違ってたらごめんなさい。本物の資料とほぼ同じことなので、資料公開されたら消すかも。
なぜGoか
Webサーバとして見たGo
- オンプレでなくクラウドでコンテナが当然になり、低スペックをたくさん並べる構成が主流
- 高速で動作してメモリ効率よい言語が求められる LL言語は分が悪い
- コンテナサイズ小さい方が良い
- ランタイムが必要なものは数百MBを超えてしまい避けたい
- gorutine により自然と効率的にCPU機能を利用できる
CLIツールとして見たGo
Perl Mongerがハマるところ
CPANがない
- gitがエコシステム
- インデクサーみたいのがない、ぐぐるとでてくる、探すのが困難
- github.com で golang + hogehoge で検索
- Module Indexer を作る予定らしい、CPANぽくなるかも(githubが落ちてもmirrorからDLできるように)
$GOPATHから逃れられない
- golangの開発はGOPATHの下で行う必要がある
- あらゆるライブラリがGOPATHの下にある前提
- Go1.8以降では $HOME/go
- Go1.12で入る go.modで気にしなくてもよくなるかも
ライブラリの管理方法がむずい
- masterのHEADを取ってきちゃう、それstableなの?
- タグ切られてないので心の目で見る必要がある
- go.mod だと semverを使うようになる、よく使われるライブラリは対応してきている
- 当面は glide/dep/go mod を使い分ける必要がある
- go modを覚えましょう
- まだまだこなれていない感
オーサリングツールがない
- MinillaとかExtUtils::MakeMaker(古い)みたいなものがない
- ライブラリの扱いとかでハマっていた
- しかも今後変わっていく...
GoとPerlの相違点
変数と型
- camelCase
- 変数には型があり、一度定義されたら別の型は代入できない
- 配列とスライスがあり、基本的にはスライスしか使わない
- perlはハッシュを使うけど、goはstructが使えるのでそっちが基本
関数
- func () 戻り値 {}
- camelCaseで書くとprivateになる
- ...で可変長引数
- 複数の値を返せる -> Perlっぽい
- 関数は変数に代入し他の関数に渡すこともできる、無名関数もできる -> javascriptっぽい
- 関数を引数にしたり戻り値にする場合すべて書く必要があり面倒、型だからしょうがない
エラーハンドリング
- perl同様例外機構がない
- 例外を出す場合は panic() -> perlのdie
- recover()でキャッチ
- panicは非推奨、致命的なエラーのみ、recover()もない
- goではエラー値を戻り値で返すことが推奨されている
- 基本的には最後の戻り値がerrorインターフェース、もしくはboolになるようにする (慣習)
defer
- defer func()すると現在の関数から抜けるときに func()を実行する
- perlのScope::Guardみたいなもの
- 戻り値がないのでdismissのようなことはできない
- スコープを抜けたときでなく、あくまで関数を抜けたときしか発動しない
- if や dorの中でdeferを書くと意図しない挙動にならない可能性がある
- defer file.Close() だと、file.Close() にて発生したエラーをハンドリングできてない
gorutine
- 理解するには時間がかかる
go func()
するだけで、別スレッド的なものが走るので並列プログラミングが簡単にできる- gorutine同士はchannelでやりとり
- PerlでいうAnyEvent や Coloと概念はほぼ一緒らしい
context.Context
package
- Perlと結構違う
追いつかなくなった
制御構文
- whileなどない
- 悪名高いswitch ですがcaseのあとにbreakを書かなくてもいい
- GOTOがある!
その他
- Struct: Perlのオブジェクトっぽいもの
- interface 満たすべき関数の定義を書く
- javaとかと違う、struct側がinterfaceを満たすとコンパイルが通る
- interfaceに関数いっぱい書くと大変
- code formatter 結構いっぱいあるので便利
WebAPI作ってみよう
- net/http を使うことで簡単にWebサーバが立つ
- Plackやってればわかりやすい?
発表が時間切れ...(残念)
Go完全に理解した(Perlカンファレンス)#yapcjapan #yapcjapanHall
— 聖 (@hijili2) 2019年1月26日
ランチセッション
おいしい#yapcjapan #yapcjapanHall pic.twitter.com/qhs8Vvo3lo
— 聖 (@hijili2) 2019年1月26日
いつもありがたいランチセッション。今回も無事先着お弁当をいただけました。今半の弁当なんて普段食べないからなあ。
Garuda紹介
使ってみないと何とも言えない感じでしたが… GUI的なツールが必要になったときに、こういうものがあることを知っていることが重要なんだろうなあと思います。
Perlを書いたことがない新卒エンジニアがPerlを書くWebエンジニアとして働いて何を感じたのかを語る
温かい気持ちになるセッションでした。若手でもPerl書いてるんですよ!って。(でもGoへ...)
Perl5の静的解析入門 機械と人間双方の歩み寄りによる平和編
Perl5の静的解析入門 / The static analysis of Perl5 - Speaker Deck
PPR.pmを駆使したPerlコードの静的解析に挑むお話。やはり動的型付け言語の静的解析はハードルが高いということを実感。しかしそこに挑む気概が凄いと思いつつ、この静的解析コードをメンテするのはまた大変そうだなとも思ってしまいました。レベルが高い… そして、やはり最後は双方の歩み寄りは必要になるということで、
「動的型付け言語でも心に静的型付けコンパイラを持つ」
— 聖 (@hijili2) 2019年1月26日
含蓄がある…#yapcjapan #yapcjapanRoom1
印象的な言葉でした… こういう心がけで望めば平和なプロダクトが訪れるわけですね…たぶん…
PerlプログラムでPerlプログラムを修正する方法
Perl プログラムで Perl プログラムを 修正する方法 - HackMD
このスライドいいなあ… hackmd.ioってのがあるんだ、知らなかった。
PPI.pmでPerlコードの把握・変更ができるので、ダメなところを自動で直せたら嬉しいよね。さてじゃあどこがダメなところなの?を特定することがやはり大変ということを、対応事例などを交え見せていただけた感じ。一つ前のお話と通じるものがありました。CPANなどをうまく使って開発プロセスの一助とする姿勢を見習いたいです。本番環境でなければ、たとえPerlが古かろうが、Dockerなどでうまく対応できるわけだし。うん、見習おう。
レガシーPerlビルド 〜現代に蘇るPerl[1-5].0とPerl6〜
レガシーPerlビルド ~現代に蘇るPerl[1-2].0とPerl6~ - Speaker Deck
歴代Perlを現代の環境で動かそうという考古学?でした。情熱が凄い。1987年のコードがGithubから簡単に取れるとか、古いPerlの方がビルド簡単だったりするとか、PerlのビルドにPerlがいるとか、無駄な興味深い知見をたくさんもらえた。何より、話す方も聞く方もみんな楽しげですごく良かった。普通に聞き入ってしまいました。
WebVRで作品を作って展示しよう
WebVRの話が主ではありますが、「面白いものを作る」という情熱が淡々とした語りの中に感じられてすごくよかった。正直、WebVRの有効活用ってなかなか難しいなあと思っていたんですが、シンプルに面白いもの作る、だけでも十分価値出るんだよなあと反省しました。Unity挫折気味おじさんですが、A-Frameのチュートリアルだけはとりあえずやってみたい。
実演 サーバレスPerl - 顔認識データを扱おう
実演サーバレスPerl.pptx - Microsoft PowerPoint Online
Azureの発表はパワポオンライン。
Microsoft Azure FunctionsでPerlのサーバレスができることを実証するお話。構成の細かいところは理解できていませんが、とにかくAzureでもPerl使えるんやぞと。shを噛ませるオーバーヘッドは大きそうですが… そして20分でライブコーディングもといライブ環境構築をするのは大変すぎるなと思いました。やはり「さて、こちらに完成したものがあります」は重要。 ちなみに、この発表内容は WEB+DB PRESS 2019年2月号 に載るそうです。興味ある方はそちらも必見です。
レガシーPerlと、Perlのこれから
20190126_YAPC_TOKYO.pdf - Speaker Deck
平成ネット史ならぬ、平成Perl史的なお話でした。聴講者から沸き起こる「懐かしい!」「あったなあ!」的な声が印象的でした。しかし、話の中には「え…それまだ使ってるんですが…」的な部分があり、個人的には心穏やかではない部分もありました… レガシーでも、そのままで十分なものは残してもいいと思うものの、ノーチャレンジになるのはよくないし… Dockerに封じ込めるとかそういう対応はすごく良いんだろうなあと。ケースバイケースではあるけど… と、懐かしさと、なんかいろいろと言葉にならない気持ちが渦巻いてしまいました。
10年モノ熟成Perlその後
資料は後ほどアップされるようです。
YAPC::Hokkaidで印象深かったのでよく覚えていたお話のその2年後談。どうなったのかなあと期待していましたが…
「変わってない」は失礼でした。現実的な範囲でできることを着実に実施してサービスを継続する姿勢があるから維持ができているわけで。何もしなけりゃ維持すらままならないですからね…
— 聖 (@hijili2) 2019年1月26日
運用変えられないのもすごくわかる…
ここまで基本的には問題なく動いてきて利益出してるものを安々と変えられない事情はすごくわかる… リソースとの兼ね合いもあるし… どうしても超えられない限界が来たときにリプレースを検討することになりがち… 熟成感はこれからも深まっていくのでしょう…
Perlコミュニティへの報恩感謝
平成ネット史ならぬ、平成Perlコミュニティ史って感じでした。あれ?デジャブかな?
CPANモジュールに必要なものが無ければ作るし、使いづらいと思えば作り直すし、やろうと思ったらみんなで面白がりながら全力でやる、そんな繰り返しでPerlコミュニティができあがっていったんだなあと。主なコミュニティメンバーのアイコンが集結した最後のスライドは感動ものでした…
私自身はコミュニティには全く貢献してないし、ちょっとPerl使ってるってだけでYAPCに来るようになり、基本的には聞いてるだけで、冒頭にも書きましたが「日本人カンファレンス真面目に聞きすぎ問題」の代表例な自覚もあり、耳が痛い感じもありました。ただ、それで気負いすぎず、まずはブログ書くところからやっていきたいと思いますなう。Perlだけでなく、OSSへの関わり方を一歩ずつ深めていきたいと感じました。頑張ろう。
まとめ
ということで、書き残しておきたい気持ちがでてきてしまったので、長めに失礼いたしました。あまり恩に報いれている気はしないのですが、少なくとも参加してブログ書くだけはしたぞということで…
今回改めて感じたのは、Perlの歴史の長さでした。Perl1.0を蘇らせる話からPerl周りの技術・コミュニティ発展の歴史が感じられる発表、一方でVRだったり、若い人がPerlを学ぶ話があったりと、このカンファレンスの中で時代を駆けていく感がすごかったなあと。歴史があり、かつコミュニティが長く活発に動いているからこそできる場なんだろうなあと思いました。Perl言語の人気自体は衰退していく状況はなかなか覆らない気はしますが、適材適所の役割が確実にあり、細くなるかもしれないけど、これからもまだまだ続いていくんだろうなという気がしました。なんか壮大だな。
まあ、大層な話は置いといて、参加しただけでも十分楽しかったですし、熱気がすごくて気持ちのいいカンファレンスでした。スタッフ・スポンサーの皆様には本当に感謝したいです、ありがとうございました。
おまけ
あと、twitterで見かけたこの手書きメモすごいなあと。似顔絵付きで非常にイメージしやすいだけでなく、メモとしても要点がすごく上手くまとまっているんですよね。こういうカンファレンスに行くたび、その場でうまくメモとりたいなあと思うんですが、聞きつつ考えたりしてるとどうもうまく行かない… 絵も加えながらこのメモが書けるって凄いなあとただただ関心してました。記事書くにあたり、参考にさせていただきました。メモうまくなりたいな…