20日から22日までの3日間、東京ビッグサイト 会議棟にて「YAPC::Asia Tokyo 2015 」が開催されています。本日は1日目。本稿では、この1日目の模様を随時レポートしていきます(注:すべてのセッションをレポートするわけではありません) 。
本日の受付は会議棟7階でした。参加者の皆さんは開場前からたくさんの方がロビーで待っていました。
Daisuke Makiさん「Opening」
オープニングの挨拶は、JPA director/YAPC::Asia 2015実行委員長の牧大輔さんです。この日を迎えられて感無量とのことです。なお前夜祭には、運営側の予想を超える500名の来場者がいたそうです。
まず、会場の諸注意を話しました。トラックAの国際会議場では飲食禁止、その他トラックの会場では食事は禁止ですが、飲み物は気を付ければ飲んでも大丈夫とのことです。
また今回のイベントでは、英語のセッションは日本語への同時通訳があり、そのレシーバーが500個ほど用意していること。ベストトーク賞を決めるので、ぜひ投票 してほしいこと。
昼食用の弁当が300個ほど用意してあり、ほしい人は6階までのこと。明日はランチセッションもあり、話を聞きながら豪華お弁当が食べられること。事前登録者のみですが懇親会が本日18時からあること。
……などを紹介し、問題があればアロハシャツを着てるスタッフまで尋ねてほしいと述べました。
そして会場や同時翻訳、ネットワークなど、イベントを運営するにあたり今回もたくさんの各社スポンサー、個人スポンサーの協力があったこととについて感謝しました。
最後に、毎年恒例の「ブログを書くまでがYAPCです」について言及したうえで、YAPC::Asia Tokyo 2015を楽しんでくださいと話しました。
Larry Wallさん「メリークリスマス!」
2000年にPerl 6のプロジェクトを発表をしてから、Larryは度々体調を崩してきたそうです。Larryは「今日は"6"や".pl"の話を期待されていた方が多いと思いますが、"2"について話をします」と告げて本題に入りました。
これまでのPerlの開発について、トールキンの著作に例えながら説明してくれました。Larry曰く、「 Perl 5は『ホビットの冒険』のようで、Perl 6は『指輪物語』のようだ」とのことで、トールキンが続編を書くのに15年を費したのと同様にPerl 6もプロジェクトが開始してから15年経っている、と述懐しました。
Perl 5とPerl 6の違いについての話題にも2作品に例えつつ、正規表現を新しくしようとしたり、型システムの混乱を解消しようとしていることを述べられました。また、Perl 6はDSLのサポートが強力でありPerl 6では言語を自ら作っていくことができるとのことです。
コンピュータ言語の設計について、仲間が必要であり、何百人という人間が開発を手伝ってくれていることに感謝していました。
Perl 6について、今年のクリスマスにリリースする予定であることを発表しました。約束できるほど確実ではないが、その予定で仲間と作業を進めている、とのことです。今年のクリスマスにリリースされるバージョンはPerl 6の全ての要件を満たしているわけではない、との注意もあり、それらについては後々のリリースに含んでいく予定である、とも述べられました。
最後に、Perl 6は失敗することを想定していたが後の言語設計者にとって役に立つ失敗ができた、と述べられ、今後のPerl 6やその先の開発も仲間たちとともに進めていきたいと締められました。
Kelsey Hightowerさん「Managing Containers at Scale with CoreOS and Kubernetes」
DockerなどのLXC(Linux Containers)クラスタを管理する方法はいくつかありますが、CoreOS社のKelsey Hightower(@kelseyhightower)さんは、Kubernetes によってCoreOS上のDockerコンテナ群を管理するうえでの考え方、基礎知識について発表し、具体的なクラスタ操作についてデモを行いました。
前半の発表部分では、従来のConfiguration管理においてはアプリケーションと実行ホストが結合していることの問題点を挙げ、アプリケーション管理を実行ホストから切り離すべきと述べました。その具体的な方法として、Kubernetesによるアプリケーション管理の方法が解説されました。
後半のデモでは、KubernetesによるServiceの登録とディスカバリ、クラスタのスケールアウト、アプリケーションコンテナのローリングアップデート、トラブルシューティングなどが実演されました。
質疑応答では、コンテナが動作するノード(実行ホスト)の操作や、設定の動的更新、ストレージの取り扱いなどについて質問があり、デモも交えて回答されました。
muddydixonさん「DeepLearning の前に知っておくことがある! 再帰型のニューラルネットワークや自己組織化マップについて語ろう」
IoTを対象としてデータ解析やデータ可視化を行っているmuddydixonさんによる、ニューラルネットワークや自己組織化マップの基礎についての発表です。
近年応用が進むDeep Learningを勉強する前に知っておいたほうがいいこと、ニューラルネットワークの動作原理や構造、歴史を解説する内容でした。
muddydixonさんは以前、再帰的ニューラルネットワークと自己組織化マップを利用して、幼児が文法や語彙を獲得する際の認知的な機構を研究していたそうです。
再帰的ニューラルネットワークを使って語順が安定な言語(英語)と語順が不安定な言語(トルコ語)を学習させると、語順が安定な言語のほうが学習の速度が速いといった結果や、文末の予測精度が最初から高い、といった結果が得られたということでした。
神経細胞が信号を伝える仕組みの説明から、パーセプトロンからDeep Learningに連なるニューラルネットワークの歴史の説明、教師あり学習と教師なし学習における学習の意味の違いなど、ニューラルネットワークの原理や仕組みに重点をおいた説明が展開され、この分野について全く知らない人でも基本的な知識が得られるような解説が展開されました。
最後に、Deep LearningやMachine Learning利用のしやすさは向上していくが、数式の導出や本質への理解があると、チューニングや新しいアルゴリズムを考えるといったことが可能になるので、原理や本質を知ってもらいたいというメッセージで、発表は締めくくられました。
jigyakkumaさん「それは僕たちのドメイン・DNS運用」
会社のドメイン、各サービスのドメイン、受託案件のキャンペーンサイトのドメイン等の多くのドメイン、DNSレコードの運用・管理に関して自社のレコード管理の歴史を踏まえて話しました。
人を介してDNSレコードを管理する方式は、情報の正確性に欠ける、変更したログが残らない、ヒューマンエラー等の問題があると指摘しました。これらの問題を解決するために、ドメイン管理・運用を行う人への伝達手段を一元化し、レコードの反映、検索やAPIによる操作が可能なRoute53を採用しました。さらに、roadworkerを使ってDNSレコードをコードで管理できるようになり、変更履歴をコード化出来るようになり、CircleCIの導入によりテスト・デプロイの自動化も実現できました。
最後に運用・管理するうえで、運用は一人でするものではないことと、常に改善を意識することが大事であるというメッセージで締めくくられました。
Teppei Satoさん「Effective ES6」
「Effective ES6」というタイトルでTeppei Satoさんが発表されました。ES5までのJavaScriptのPrototype inheritance、Function scopeなどといった落とし穴と、ES6の代表的な特徴をを紹介されたうえで、ES6によってES5までに落とし穴を回避するために蓄積されたパターンがどのように問題があり、どう解決したかをそれぞれコードの具体例を出しながら解説していました。
最後は、現状ブラウザなどのサポートは完全ではないが、Babelというトランスパイラがあるのでそちらを利用して積極的に使って行きましょう、という話でしめられていました。
Kazuhiro Hommaさん「Web由来の組み込みエンジニアの半年間のすべて ~WebとiOSとBLEとハードウェアデバイスのこと~」
Webの知識をもったハード・組込みエンジニアの重要性は今後上がっていくと思うと語るKazuhiro Hommaさん。世界初の完全後付けスマートロックであるAkerunを開発され、それで起業までされています。そんなご自身の経験をもとに、Webエンジニアが組込み開発を行うにあたって必要となった知識や経験などについて発表しました。
まずはAkerunの生い立ちから語られました。これは「世の中で最もhackされてないものをhackしたい」という思いから飲み会でアイデアが生まれたとのこと。IoT(Internet of Things)やBLE(Bluetooth Low Energy)といった技術の発展と、クラウドファンディングの一般化により資金調達がしやすくなっているという時代的背景もあり、ハードウェアベンチャーを始めやすくなっているといいます。
実際にやってみてると、回路図を読むこと、デジタルマルチメーターやオシロスコープに慣れるなど、Webエンジニアには馴染みのない知識も必要だと感じたそうです。これらの知識は専門のメンバーに任せる部分ではあるのですが、意見を言える程度には知っておくことが重要で、Arduinoでプロトタイプやデモ機などを作って学ばれたそうです。ただそれだけでは不足している部分も当然あり、実際製品化する段階では消費電力を気にしたりセキュリティの考慮が必要などの苦労もあったそうです。
Webエンジニアが組込みをやる利点として、とくにIoT分野では通信やセキュリティの知識などが活かせることや、設定用のWebツールを作れたり工場検査を自動化したりなど活躍できることが多いとのことでした。
最後に「あなたもハードの世界に飛び込んでみませんか」と呼びかけていらっしゃいました。
Yukihiro "Matz" Matsumotoさん「TBD」
これまでにも何度もPerlのカンファレンスに登壇してきたというRubyの創始者Matzさんは、「 今、新しい言語を設計するならどのような言語にするか」をよく質問されると述べ、Rubyについて良くなかった点についていくつか挙げられました。主なものとして「Perlの影響」「 Lispの影響」を挙げられました。良い影響も受けたが同時にそれらの言語の失敗もいくつか引き継いでしまったとのことです。
それからRubyを作りはじめた20年前と現在のアーキテクチャの変化についても触れられました。アーキテクチャは振り子のようになっているとのことで、サーバとクライアントの関係性はハードウェア性能の向上によって変わり、Webの発展によって変わり、ブラウザの進化によってまた変わった、ということが起きているそうです。
また、最近はマルチコアが普及してきたことを受け、シェルスクリプトのような言語に可能性を見出しているとのことで、昨年末に開発をはじめたStreemというプログラミング言語について触れられました。Streemは手続き型でパイプラインを組み立て、その後にイベントループでデータを流すという手順で動くそうです。
Streemは200行程度の動作しないプロトタイプをGitHubにアップしたところ、いくつものPull Requestが送られてきて、簡単なサンプルなら動くようになったとのことです。関数定義やライブラリがないなど実用には遠いそうですが、Matzさん自身は最近のテクノロジーバランスに合わせて作った将来性のある言語ではないか、と述べられました。
最後に、環境の変化が新しい言語が生まれるきっかけになるとし、その一例であるStreemは面白いので一緒に遊ぼう、と呼びかけられました。
Toru Kobayashiさん「今フロントエンドで何が起こっているのか」
最初に、今までのWebの歴史を振り返りました。HTML全体を更新するステートレスな時代から、Ajaxを用いて非同期でデータを取得できるようになり、Webは単なる静的なページからWebアプリケーションに進化したといいます。また、jQueryの登場によってブラウザの互換性の問題が改善され、Promiseなどの新しい概念も取り入れられるようになりました。
また、CoffeeScriptやTypeScriptなどのJavaScriptにコンパイルされる言語の話や、Node.jsやECMA Script 2015、Babelなど言語仕様や処理系の話題も取り上げられました。
Angular.jsなどのフレームワークやgulpなどのビルドツールの利点、React.jsやReduxなどのステートレスで宣言的な記述が有用であることなど最近ホットなトピックについても触れられ、幅広い知識が得られる実用的なトークでした。
macopy nnid:mackee_wさん「どうしてもPerlでドローンを飛ばしたい人のためのハードウェアハック概論」
@mackee_wさんによるPerlでクアッドコプターを飛ばすための技術、ハードウェアのハックに関するセッションでした。
前半はクアッドコプターを外部から操作するための方法を説明しました。Phantomというクアッドコプターのハードウェアをハックして、Raspberry PIからArduino経由(UART)でNAZAというコントローラに接続し、クアッドコプターをリモートで動かす方法に関して説明しました。また、ハードウェアをハックするうえで、ボードを安全に作るための手法に関して紹介していました。
後半はクアッドコプターの自作に必要な構成要素やそれぞれの役割・仕組みを、実際のパーツやクアッドコプターの操作デモを交えて説明しました。クアッドコプターの制御にオープンソースのMultiWiiを利用しており、PerlからMultiWiiを操作するための自作ライブラリを紹介しました。
Kazuho Okuさん「HTTP/2時代のウェブサイト設計」
最初に、詳しいデータを使用して転送データ量の増加やHTTP/1.1の問題点など背景の説明から入り、解決策としてレイテンシに負けないプロトコルが必要であるという解説をされました。
そして、HTTP/2の基本的な仕様と何故その仕様になっているのかという理由を説明され、多重化、ヘッダ圧縮、優先度制御といった技術の詳細と優位性の説明をされHTTP/2を使用することにより、Webがどう高速になるかを説明されました。
実際にFirefoxやChromeといったクライアントサイドとご自身が開発されているH2Oをはじめとするサーバーサイドの実装状況を説明され、これまで最適化技術がHTTP/2によって変わることなどを説明されました。その他セキュリティ周りの解説も含めてH2Oがどのようにその問題を解決しているかの話もされていました。最後にnginxもHTTP/2の対応を追いかけてくるが、H2Oは更にその先へ進めていくという話を力強くされて締められました。
fujiwaraさん「Consulと自作OSSを活用した100台規模のWebサービス運用」
FUJIWARA Shunichiro(@fujiwara)さんが所属する面白法人カヤックでは、スマートフォンゲームSNS「Lobi 」というサービスを提供しています。そのシステムはAWSのTokyoリージョン内で100台規模のサーバにより稼働しています。今回の発表ではLobiのかんたんな紹介と、オーケストレーションツールConsul を用いたシステム運用について、詳しく解説されました。
ConsulはAgentプロセスをConsul Serverと、クラスタの管理下に置かれるClientホスト全台で稼働させる仕組みです。Consulの主要な機能としては、サービスディスカバリやKVS、DNSインターフェースなどがあります。
Stretcher は@fujiwaraさんが開発したツールで、Consulを利用してPull型デプロイを実現するものです。発表ではStretcherを使ったデプロイの仕組みについて、詳しく話されました。他に、動画変換サーバのオートスケールの仕組みや、Consul KVSをバックエンドにしたConsul KV Dashboard など、カヤックでConsulを活用するうえでの実践的なノウハウが多数紹介されました。
最後に発表のまとめとして、「 Consulの機能は豊富だが、各自で必要な機能だけを使えばよい」と締め括られました。
Casey Westさん「Conway's Law of Distributed Work」
Casey Westさんは、これまでの10年間にわたってリモートワークをした経験を基に、地理的に離れた場所にいる人々で構成されたチームでプロダクト開発を行うために、どういったツールを使い、何に気をつけなければいけないか、といったテーマで発表を行いました。
まず、Caseyさんは全ての組織とその文化でリモートワークが可能なわけではないと断りつつも、効果的なコミュニケーションを意識し、適切なツールとテクニックを使うことでカバーすることが可能だと言います。重要なのは透明性で、情報を積極的に共有して意思決定の過程を誰もが追えるようにしなければならないということでした。
このように、チームの人々が、意識的にコミュニケーションの透明性を保つようコミュニケーションの形を変えなければ、リモートで働くことはできないそうです。
そして、リモートワークを成功させるために使われる具体的なツールとその利用方法、テクニックについて詳しく説明していきます。コミュニケーションの手段としてのチャットや電話会議、ビデオ会議の紹介では、チームおよび個人間でのコミュニケーションが行えることが要件として挙げられていました。開発のためのツールの紹介では、特にコードレビューの重要さが強調されていて、レビューには時間がかかるが、トータルで見れば作業の量は確実に減るので、行うべきということです。
また、決定がなされた経緯やエンジニアがその時に何を考えていたかを追うためのツールとして、コミットメッセージは重要だとしていました。後で見返した時に、なぜこの変更が行われたかを誰が見てもわかるようにしておくために、コミットメッセージにはなぜ、を書かなければならないとしていました。
そのほか、ペアプログラミングのためのスクリーンシェアリング、タスク管理ツール、多人数で編集可能なドキュメント編集ツール、大きなファイルを共有するストレージ、共有のカレンダーについて、具体的なプロダクトやサービスの紹介や、それらの使い方について説明がなされました。
電子メールに関しては、非同期のコミュニケーションとしては良いが、コラボレーションのツールとしては不向きとのことでした。送ってからすぐに読まれると期待しないほうがよく、テキストチャットを並行して使うようにすれば良いといったことが言われていました。
テクニックの解説では、リモートワークを導入する際にチーム全員が1週間程度体験してみることや、定期的なミートアップの開催、コミュニケーションをやや過剰にすること、そして自分が仕事をしているサインを発信することについて語られました。Caseyさん自身、プログラムを書くことに集中しすぎてしまった結果、チームメンバーから自分がどのようなことをしているか見えづらくなってしまったということがあったそうです。そこで、自分から積極的に自分が何をしているか見せていくことの重要さに気づいたそうです。
最後に、どのようなシステムも、そのシステムを作る組織の構造をコピーするというConway's Lawを引用し、プロダクトを作る組織の健全さを気遣っていくことが、製品を作るうえで重要な要素になる、という言葉で締めくくられました。
cho45さん「WebAudioで入門する信号処理」
HTML5のWebAudioに関するセッションでした。まず、WebAudioの概要として、AudioNodeが基本単位であり、AudioNodeを複数接続することでストリーム処理を行うのが基本的な使い方であると説明しました。また、音を出したり、マイク入力が取れるうえに、JavaScriptで処理ができるNodeがあり、生の信号データを自由に処理できるため、柔軟な信号処理ができるそうです。
WebAudioを利用する前に知っておくべき基本的な信号処理技術、波の基本用語に関して非常にわかりやすく説明されていました。WebAudioで実装したモデムのデモでは、昔懐かしいダイアルアップ接続の効果音とともに画像ファイルが転送されていくデモを見て、会場から歓声が上がりました。
また、昨今の通信技術に関しても紹介されており、超高音通信やIoTとの連携とWebAudioの可能性に関して話しました。最後に「WebAudioはHTML5の他の機能と比べて異質のポテンシャルを持っているので、是非WebAudioを触ってみてほしい」というメッセージで締めくくられました。
Shinpei Maruyamaさん「Perlで学ぼう!文系プログラマのための、知識ゼロからのデータ構造と計算量」
しんぺい、猫型のHNでも親しまれるShinpei Maruyamaさんの、データ構造と計算量についての初心者向けの発表です。
データ構造、計算量についての前提知識として、プログラミングにおけるメモリの扱いをCの変数を例に図示しながら解説します。
変数(や関数やモナド)を箱と表現することもありますが、実際には変数はメモリとして考えたほうが良いというMaruyamaさん。変数を箱だと思うと理解が難しいが、メモリに値が入っていると思うと理解が難しくなくなると言います。続き、C言語の配列の仕組み、単方向連結リストについて解説しながらPerlで実装することで聴衆によりデータ構造がイメージしやすくなるように発表していきます。こちらもメモリがどうなっているかの理解を促したため聴衆にも理解しやすくなっています。
前提知識の後は計算量、オーダー法について解説。オーダー法をデータ数がnなら定数倍や定数項は無視してO(n)と表す、ある種雑な考え方として紹介します。Shinpei Maruyamaさんはいろいろな計算量をグラフで見ると特徴が分かることを図示しながら説明、O(n)とO(n^2)、O(log n)のデータ量に対する計算量が可視化されます。オーダー法ははざくっと指標を確認するもの、どのようなデータ構造を採用するかの判断材料になるとO(n)の使い方を解説します。
計算量から導かれる嬉しいデータ構造として2分木を紹介。続いてB木、B+木とバランスさせやすさやシーケンシャルアクセスのしやすさなどの特徴を交えつつ解説しました。
データ構造はイメージがあるだけでわかりやすくなること、データ構造がわかっていないと難しい話もわかるようになることなど改めてデータ構造と計算量を知ることがどのように役に立つかを述べ、今後の学習や業務に活かしていただければ幸いと発表を終えました。質疑応答では、このような話をブログに書いたり発表したりするモチベーションを問われた時、自身が苦労した経験などを踏まえ基底の苦労を減らしたいこと、自信を育ててくれたPerlコミュニティへの感謝の意も込めて活動しているとのことでした。
とっつきがたいと思う人もデータ構造と計算量が前提知識なしでもわかる、初心者や自信がない人には有意義な発表でした。
ジンジニアさん「【 sponsored contents】若手エンジニア達の生存戦略」
このセッションは、座談会形式でPerlに関わりのある若手エンジニア達の話を聞くというものでした。仕事で人事をされているジンジニアさんがファシリテータとなり、他4人のパネラーの話を聞くというもので、登壇者全員がビールを飲みながらのゆるふわな雰囲気でのトークセッションとなりました。登壇者は全員26歳で、社会人歴も2~4年の若手達です。
最初の話題は、若手にとってPerlという言語はどういうものかということでした。ほとんどの登壇者は記号が多いなどはあるが、特に違和感はないと答えていました。周りで影響を受けた人については、@hisaichi5518さんは@songmuさんであったり、@dankogaiさんにブログを通して勝手に添削された経験などを語り、よい先人たちに恵まれたことが伺えました。
コミュニティへの関わり方について、@mihyaeru21さんは積極的に関わることはできてないと述べたうえで、ほとんどの若い人は@mihyaeru21さんと同じようにコミュニティへの関わりは薄いだろうとしながらも、新潟県のエンジニアコミュニティへ参加したのをきっかけにIT業界へ就職したという自身のエピソードを元にコミュニティ活動の魅力を紹介していました。
若手であることで苦労した点を聞かれると、@zoncoenさんは逆に若手であることを利用しているという話をされました。若手だからこそ自由に言える様々なことをどんどん組織にフィードバックしているということを話すと、登壇者からも同意する意見が相次ぎました。
最後に会場から10年後にどういう風になっていたいかを聞かれると@__papix__さんから「今の会社がエンジニアにとって最高であるような会社にしたい」という意見が出たり、「 IT芸人ではなく技術的に有名な人間になって、お金を儲けたい」という率直な意見が挙がったりしました。筆者は長年IT業界に携わっていますが、このような若い人々の前向きな決意を聞いて、今後のIT業界も期待ができる有望な業界になりそうだなと感じました。
趣味はマリンスポーツですさん「Perlの上にも三年 ~ ずっとイケてるサービスを作り続ける技術 ~」
Perlの上にも三年、ずっとイケてるサービスを作り続ける技術を、Hatenaでの歴史を紐解きながら、@hitode909さんが紹介されていました。
冒頭では、イケてるサービスを作りつづけるための条件として、継続した開発、迷わず書ける状態、一貫した指針、それも最新の指針が必要だと述べられました。では、これらはどのようにして得られたのでしょうか。
まず紹介されたのはHatenaでのフレームワークです。初期のRidge+Mocoの構成は、複雑性による高い学習コストや予期せぬ不具合が多いという欠点を抱えていました。そこで、「 読むコードが最小=安全」という考えの元に、ブログでは非常にシンプルなフレームワークが採用されました。
このようなシンプルなWAF上では否応なしにコピペが発生します。これに対する対抗手段として、MVC横断の機能毎に別れたサービス層の導入が行われました。これにより、コピペの削減された簡潔なControllerになりました。
次に紹介されていたのは、オブジェクト指向です。サービス層が導入された当時はステートレスなクラスメソッドばかりが好んで利用されていました。しかし、クラスメソッドのみでは、ブログの複雑で多岐に渡るユースケースには耐えられません。そこで、丁寧なオブジェクト指向を導入して、シンプルに実装を行うことになりました。
この後に行き着いたのは、ドメイン駆動設計(DDD)です。Controllerから脱出したServiceは、DDDでは一般的な概念でした。そして、DDDに基づき、はてなブックマークは、Scalaでフルスクラッチ中です。
また、チームメンバー全員が同一の言葉を用いることで、開発効率が上がることも触れられました。その為の手法としては、言葉の選定をきちんとやることや、コード上のコメントとして管理していく重要性が述べられました。
ここで重要なのは、長年の知見に基づく新しい方針に合わせて、あとから変更可能な構造にしておくことです。これにより、過去を捨てて、最高の設計に向かう事ができると述べられていました。
実際に、これらを組み込んだはてなブログは簡潔に保たれています。インターン生でも理解が容易であり、チーム配属から3週間のうちにリリースできる物になりました。
最後の締めくくりでは、「 いちどPerlから出て、オブジェクト指向やDDD等、外の世界の知見をPerlに持って帰る」ことが重要だと述べられていました。
Ben Ogleさん「Electron: Building desktop apps with web technologies」
GitHubのBen OgleさんによるElectronのプレゼンテーションです。まずはElectronを使って実装されているAtomの紹介から。Atomはつい最近1.0がリリースされた、GitHubが開発したオープンソースのテキストエディタです。通常のデスクトップアプリケーションと同じように、メニューやファイルシステム、クリップボードへのアクセスが行えますが、HTML、CSS、JavaScriptといったWebの技術を用いて実装されています。
通常のChrome上でシングルページのWebアプリケーションを開いた状態に似ていますが、ファイルシステムやクリップボードへのアクセスといったOSとの統合という点で、はるかにパワフルなものとなっているそうです。これはWebとデスクトップアプリケーション、両方のいいとこどりになっているからだ、とBenさんは言います。
Electronは、ネイティブのアプリケーションをWeb技術で作成するためのフレームワークです。作成されたアプリケーションはクロスプラットフォームなアプリケーションとなります。AtomはElectronの上に実装されており、ElectronはOSの機能にアクセスするためのAPIとブラウザエンジンを提供しています。これはChromiumとio.js(Node.js)を組み合わせることで実現されています。このため、公開されたnpmモジュールを使ってアプリケーションを実装することが可能です。
Atomの他にも、すでにElectronを使ったアプリケーションは数多く開発されており、Visual Studio CodeやFacebook Nuclideといったエディタや、Slackのデスクトップクライアント、FIREBALLというゲームエディタ、Electronで作成されたアプリケーションを動作させることのできるJiboというロボットなど、様々なプロダクトがElectronを使って作られているようです。
次に、Electronを使ってデスクトップアプリケーションを作成するデモが行われました。画像を表示するだけの簡単なアプリケーション からはじまって、猫の画像を認識するアプリケーション 、ベクター描画アプリケーション などが紹介され、複雑なアプリケーションも簡単に実装できるということが示されました。猫の画像を認識するアプリケーションは2時間程度で実装できたとのことです。
最後に、PerlでElectronのアプリケーションを開発する、というチャレンジが提示されました。Perlitoというコンパイラを使うと、PerlをJavaScriptにコンパイルすることができるそうです。これをelectron-complieに統合すればPerlでElectronアプリケーションを開発できると思うので、会場の皆さんには是非挑戦してほしい、とのことでした。
Atsuo Fukayaさん「esa.io - 趣味から育てたWebサービスで生きていく」
ドキュメント共有サービスesaを開発されているFukayaさんは、esaの事例を元に趣味で作ったプロダクトを育てていく方法について話されました。esaを始める前は様々な仕事を経験しながら、趣味でもスマートフォンアプリやChrome拡張を開発してきたそうで、当時の経験から「いろいろ試すことが大事」であり、失敗しても成功しても得るものはある、そのためには「公開することが大事」だと述べられました。
esaを作り始めてからは自分自身が毎日esaを利用し、開発のモチベーションを維持していたそうで、最初の1、2ヵ月はコミット量も多かったとのこと。開発を進めるうちに企業から使ってみたいという声をいただくようになりました。サービスに対して責任を持って運営していくことを表明するために、運営会社を立ち上げるに至ったそうです。
普段から「楽しく開発できること」を大事にしているそうで、意識的にモチベーションを維持するために制御可能な事柄に注力しているとのことです。他にもリリースノートをesa上で書くことの楽しさ等もモチベーションにしているそうです。
自身の5年前の日記を引用し、色々な試行錯誤を経て当時やりたいと思っていたことができている、と振り返り、「 どんどん試行錯誤しよう。自分のやりたいことをやって生活できて、それで周りの人を幸せにできると最高!」と締められました。
moznionさん「Yet Another Perl Cooking」
@moznionさんにより、Yet Another Perl Cooking とは、Programmable Cookingのことだと提唱されていました。それは、API Basedで様々なデバイスから操作でき、誰でも同じ料理を作れる再現性があり、自動化された料理のことです。
その例として、Low-temperature Cookingによるローストビーフの作成を紹介していました。構成としては、水槽の中に、真空パックした牛もも肉を投入し、投げ込みヒーターで加熱をします。ヒーターは、Raspberry Piを用いて、設定温度に対するON/OFF制御をします。また、Raspberry Pi上にはAmon2::Liteを用いたサーバを立てており、JSONで利用可能なWeb APIが提供されていました。
curlコマンドから電源を投入し、待つこと4時間、非常に美味しいローストビーフが完成しました。
安全上のリスクが高いので、もし挑戦する場合も、安全に対する充分な配慮を行い、あくまで自己責任でお願い致しますとのことです。
Kazuhiro Osawaさん「大規模でも小中規模サービスでも捗る microservices な Web サービスのつくりかた」
マイクロサービスは、バズワードではあるが、ごく普通の開発手法であるということが説明されたセッションでした。
例として、スタートアップにおける最適な手法が説明されていました。小さいサービスでは、モノリシックなコードが効率的であるため、MVCをきちんと設計したうえで、ジョブキューやワーカーとしてマイクロサービスを利用することが可能だと説明されていました。
中規模に成長したサービスにおいては、他のサービスや社外でも使いたい、スケールアウトしたい際に、特定の機能をライブラリではなく、APIとしてマイクロサービス化する手法が述べられました。そして、大規模に成長した場合は、コミュニケーションを適切に行う為のドキュメンテーションが重要であり、WikiやERD、UMLがその例として示されました。
締めくくりとして、初期設計での正しいコンポーネント化が重要であることが述べられました。正しい設計により、モノリシックで開発してもサービスの成長に合わせて、適切にスケールアウト戦略を取ることが可能になるということでした。
Hideaki Nagamineさん「PietでLISP処理系を書くのは難しい」
Pietはドット絵でプログラムを表現する難解プログラミング言語です。京大マイコンクラブではPietが大流行しているそうで、エディタやPietに変換される言語など、周辺ツールの開発も盛んだそうです。
Pietは画像の中の点を法則にそって移動しながら命令を実行していきます。最大公約数を求めるプログラムなどを例として画面に提示するたび、その難解さに聴衆から笑いが起きていました。
最後に、最終的にPietに変換されるPASXXという言語を使ってLispを実装したことを紹介していました。変数などの環境を実装するのがとても大変で完全な実装にはまだ至っていないことや、今後の展望として関連ツールの機能追加などを目指したいと述べていました。
Tokuhiro Matsunoさん「Perl6 on JVM: It works??」
Amon2やTest::Requiresなどの作者であるtokuhiromさんの発表です。Perl 6の実装であるRakudo Starはuseful、usableであると主張していますが、これが本当かどうかを検証するという趣旨のトークです。
まず、Rakudoのバックエンドに使われているVMには幾つか種類があり、もともとメインストリームであったParrotに加えてMoarVMが登場したことや、JVMを利用した実装があることなどが述べられました。なかでもJVM版はJavaの資産が使えることや、ゼロから開発した前者2つにくらべて安定していることが紹介されました。
また、Web開発に必要なHTTPやDBアクセスなどのモジュールが最低限揃っていることや、C APIやJavaのライブラリを利用したGUIアプリケーションが実装できることなどを挙げ、問題はあるが遊べるくらいのレベルには来ているという評価をされていました。
karupaneruraさん「うっかりをなくす技術」
「うっかりをなくす技術」というタイトルでkarupaneruraさんが発表しました。開発の現場で起きがちなヒューマンエラーを安全工学の視点を交えつつ、人的、マネジメント、環境に分類しそれぞれの要因と事例を挙げ、それらを如何に解決に導くかという話をされました。
具体的には、ヒヤリハット、ハインリッヒの法則などを交えて深刻な問題に至る経緯を説明し、ReadableCode、ドキュメントの整備、各種言語を例にとりstrict.pmやESLintなどミスに気づきやすい仕組みを導入することが重要であると述べられていました。最後に、他に良い仕組みもあるはずなので一緒に探していきましょう、という呼びかけで締められました。
Yusuke Wadaさん「Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN」
@yusukebeさんが、自身のPodcastである「だんごゆっけの平和な話」と「wada.fm」での実体験から、Podcastによる配信の楽しさ、配信に必要な機材やソフトウェア、配信の工程に関して話しました。
Podcast配信で最初にやるべきこととして、ドメイン決め、Webサイトの構成(URI) 、Media RSSフィード生成手段の検討が必要だと述べていました。また、iTunesStoreではレビューや購読者数などのベンチマークを取ることができて、登録は簡単かつ無料で行える便利なサービスであると紹介していました。
コンテンツに関しては、コーナーを作る、台本を決める等の工夫をすることにより、コンテンツを充実させているそうです。実際に利用されている機材の説明では、静かな場所で取ることを大前提として、マイクの特性を考慮してより聞き取りやすくなるようなマイクを選択していることを話しました。また、Podcastをしていて楽しかったことの例として、ポン出しとして使っている「わだえふえ~む」のジングルのモバイルアプリを、リスナーがいつの間にか作ってくれたというエピソードも語られていました。
最後に、Podcastは聞くのも配信するのも含めて楽しいので、自分なりに作ってみてくださいと、発表を締められました。
「Lightning Talks Day 1」
1日目のLightning Talksです。
日本最多のオフィス訪問シリーズ「行ってきたシリーズ」のTOP5+αとして日本のイケてるオフィスを紹介しちゃうよ! @941さん
@941さんが執筆されているブログ「オフィス訪問シリーズ」の紹介でした。現在107記事あり350万PVを誇っているそうです。業界での知名度も抜群でこれがきっかけで転職したなどの声も聞くとのこと。そんな人気ブログの中で1位はネクストイノベーションさんだったそうです。他にもすごいお金かかってそうなオフィスや個性的なオフィスなど、多様性の大事さを強調されていました。
Gitの作り方 @DQNEOさん
Gitを理解する最良の方法は自分でGitを実装することだ! ということで実際にGitのサブコマンドを実装したという発表です。LTではgit addとgit cat-file -pを実装する手順を説明されていました。他にも4つか5つのサブコマンドを実装したそうで、git checkoutも実装することができたそうです。
SaaSで作る、ぼくらの障害対応術! @papixさん
最近は便利なSaaSがいろいろでてきているので、Mackerelを軸にそれらを組み合わせて障害発生からその対応、記録までを支援するシステムを作られた発表でした。監視と検知にMackerelを使い、コミュニケーションにReactio、記録にQiita::Teamを用いたシステムを構築されたそうです。発表中に本当の障害通知が飛んでくるというハプニングもありつつ、障害はなくせない、備えあれば憂いなし、と締めくくっていらっしゃいました。
cpm - an experimental cpan client
新しいCPANクライアント、cpmを開発したという発表でした。既存のCPANクライアントがいくつかある中で新しくクライアントを開発した理由は、インストール処理の高速化がしたかったからとのことでした。内部的にはMenloを並列で動作させる仕組みとなっており、LT中に行われたデモではその速度に驚きの声が上がっていました。cpmはCPANで公開済みで、App::cpmでインストール可能だそうです。
Norikraで作るPHPの例外検出システム @kazeburoさん
最近PHPを始められたという@kazeburoさんからは、PHPのエラーを監視・検出するシステムを作成されたという発表でした。PHPのエラー検知はエラーと例外が別物であったり、エラーハンドラも複数種類あったりなどで苦労されたとのこと。それをすべてログに記録し、Norikraを使って集約してSlackに通知するシステムを構築されたそうです。PHPのノウハウは調べると全部uzullaさんのブログに書いてあり、uzullaさんすごい、と締めくくられました。
RSSをざっくりクロールしてゆるふわにパースする @ace_projectさん
@ace_projectさんによるRSSを扱う際のTipsを紹介する発表です。RSSを取得してブログパーツを生成するサービスを運営するなかで、パースができないRSSを正規表現でゆるふわにパースした事例や、取得できないRSSをプロキシを通して取得する事例が紹介されました。ユーザの入力値に関わらずサービスを落とさないようにするために、できるだけパースしできるだけクロールする方針でサービスの構築をされたそうです。なお、群馬にもインターネットはあるとのことです。
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする @sairoutineさん
趣味プログラミングの時間を最高にするために、好きな美少女キャラのbotを作成されたそうです。呼びかければ答えてくれるだけではなく、nodeのcronモジュールをつかって定期的に話かけてくれたり、Twitterへの投稿やdeployを頼むこともできるそうです。自分でやったほうが早くないかというツッコミに対して、自分のためになにかをしてくれるのが嫁っぽくて良い、と熱い思いを語られていました。
YAPC? 雨事情 @likkさん
会社を出たら雨が降っていて、エレベーターでオフィスに戻るのが面倒だ、という状況を防ぐために、Slackを使って天気を通知するサービスを作ったという発表です。tenki.jpから雨雲のデータを取得するライブラリを作成し、会社の位置の色が普段と異なっていた場合に雨の通知をSlackに送信する構成になっています。URLのパターンから過去のデータも取得できるということがわかったそうで、過去のYAPCの天気も紹介されていました。
Pugs on stack @hirataraさん
Pugsは2006年に発表されたHaskellによるPerl 6実装ですが、2007年に開発は止まってしまい最新のghcではビルドできなくなっていました。それをhirataraさんはパッチを書いてビルドできるようにされたそうです。作者のAudrey氏にパッチを送るとすぐにリリースしてくれたそうで、現在はstackを使ってインストールできるようになっているとのことです。
(昔の) PHP が誇った最高の機能 register_globals の真実、そして未来へ @gongoZ
PHP 5.4で削除されたregister_globalsという最高の機能についての発表です。今でもPHP 5.3を使い続けているアプリケーションは、register_globalsに依存しているのでは? という話から、register_globalsをエミュレートする方法としてドキュメントに書かれている方法を取ってはいけない理由、実はregister_globalsにはドキュメントに書かれていない仕様が存在する話などが展開されました。
同人活動の報告と今後の展望 まかまか般若波羅蜜さん
毎年恒例のまかまかさんからのLTです。Acme大全2015は全430ページ、565個のAcmeモジュールを掲載しているそうです。今年はAcme大全に関する質疑応答が発表され、記事はWordで書いているという裏話や電子書籍版はPerl 6と同時リリースする予定などが回答されました。
ブース
7階国際会議場横には、いくつかブースが設営されています。
今年の同人誌販売ブースでは、『 Acme大全 2015』( 電子版ダウンロード権付)と『雅なPerl入門 第3版』が発売されています。
懇親会
1日目のセッション終了後、1階のレセプションホールにて、600名規模の懇親会が開催されました。最初に、懇親会スポンサーのDeNAの@bayashiさんとCAREER HACKの松尾さんによる挨拶と乾杯が行われ、その後、皆さん歓談を楽しんでいました。
1日目のレポートは以上になります。