“just epic”と書くだけでサーバを起動する方法
“just epic”と書くだけでサーバを起動する方法:
こんにちは、
id:aerealです。普段はいま皆さんがご覧になっているHatena Developer Blogをホストしているはてなブログというサービスの開発に携わっております。
本日はそのはてなブログのコードで使われているオシャレなサーバ起動コードについてご紹介します。
はてなブログのローカル開発用のサーバ起動スクリプトは、タイトルにあるように“just epic”というコードを実行しています。
どうしてそんなことができるのでしょうか?
それでは実際にはてなブログの起動コードの一部をご覧ください:
はてなブログはこのコードを実行するとローカルで起動するようになっています *1。
このコードをdeparseしてみます:
これはindirect object notationと呼ばれて、
refs. perlmod - perldoc.perl.org
このコード片は不完全で、実行可能な・そして実際に使われているコードの一部がこちらです:
このコードは、はてなブログ開発黎明期に
id:motemen によってローカル起動用の便利スクリプトが追加された時からあるものです。
indirect object notationの実用的な例(?)として個人的に気に入っているコードです。
また西暦が入っていることから毎年年明けに更新しております。
毎年更新しております
もうすぐこのコードを2019に更新する季節ですね、はやいものです。
以上、優雅な起動コードをPerlで書くおはなしでした。この記事はPerl Advent Calendar 2018の23日目の記事としてお送りしました。
こんにちは、
本日はそのはてなブログのコードで使われているオシャレなサーバ起動コードについてご紹介します。
はてなブログのローカル開発用のサーバ起動スクリプトは、タイトルにあるように“just epic”というコードを実行しています。
どうしてそんなことができるのでしょうか?
それでは実際にはてなブログの起動コードの一部をご覧ください:
まるで自然文のようですが歴としたPerlのコードです。just epic. 2011-2018;
はてなブログはこのコードを実行するとローカルで起動するようになっています *1。
このコードをdeparseしてみます:
✘╹◡╹✘ < cat epicup just epic. 2011-2018; ✘╹◡╹✘ < perl -MO=Deparse ./epicup 'epic'->just . '2011' - 2018; ./epicup syntax OK
2011-2018 は減算で、 . は文字列結合ということはぱっと見てわかりますが just epic *2 *3 がちょっとややこしいですね。これはindirect object notationと呼ばれて、
A B; は B->A と解釈されます。 print STDERR 'oops'; も STDERR->print('oops') のindirect object notationなんですね。refs. perlmod - perldoc.perl.org
このコード片は不完全で、実行可能な・そして実際に使われているコードの一部がこちらです:
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
no warnings qw(void);
use Proclet;
our $runner = Proclet->new(color => 1);
just epic.
2011-2018;
sub epic::just {
delete $::{'epic::'}{just};
$main::runner->run;
}
sub epic::just {} は package epic; sub just {} と等価なので、 just epic で実行されるサブルーチンが定義されます。main:: はパッケージを明示しなかった場合のデフォルトのパッケージ名で、 $main::runner で our $runner を参照できます。このコードは、はてなブログ開発黎明期に
indirect object notationの実用的な例(?)として個人的に気に入っているコードです。
また西暦が入っていることから毎年年明けに更新しております。
毎年更新しておりますもうすぐこのコードを2019に更新する季節ですね、はやいものです。
以上、優雅な起動コードをPerlで書くおはなしでした。この記事はPerl Advent Calendar 2018の23日目の記事としてお送りしました。
*1:本番では使われていません
*2:ちなみに1: epicははてなブログのリポジトリ名です Hatena blogdevelopmentflow
*3:ちなみに2: just epicの初出はこちらです: Tatsuhiko Miyagawa on Twitter: "Watched Madoka Magica ep3. This is epic. Just epic."
*2:ちなみに1: epicははてなブログのリポジトリ名です Hatena blogdevelopmentflow
*3:ちなみに2: just epicの初出はこちらです: Tatsuhiko Miyagawa on Twitter: "Watched Madoka Magica ep3. This is epic. Just epic."
| オリジナルのエンクロージャ: |
| 20181221162757.png |
コメント
コメントを投稿