SlideShare ist ein Scribd-Unternehmen logo
1 von 15
ExcelとGo
Gopher Night #1
3/17/2016
渋川よしき
忍び寄るGo
• かつて、言語が発表されてから普及するまでには長い時間が必要だった
• C++はMFCやC++ BuilderなどのDOS→Windows GUI化の流れの中で広まっていった
• Javaは雑誌でたくさん宣伝された。オブジェクト指向、XML、アジャイル開発、コンポーネントといった
技術ブームによるブースト効果の恩恵もあった
• Perl、PHP、Rubyは大規模(参加人数3桁〜4桁)なイベントが繰り返し行われ、書籍も数多く発売され、
Webサービス開発の広がりとともに広がった
• Pythonはビッグデータ、ディープラーニングブームでユーザが数倍に
• C#はWindowsデスクトップ用途が強かったが、近年はUnity、.NET Coreが追い風
• Goの場合
• Goは本もあまり出てないし、イベントもせいぜい3桁前半だし、島根県もバックアップしてないし、
アイドルいないし、雑誌等の露出も少ないのに、なぜか使っている人が多い
• Goはキモい
Goの卑劣な手口
(その1) コマンドラインツール
いきなりサービスそのものの開発で使うには、インフラなど多くの人の説得が必要だが、
そのような調整があまり必要のないツールとして職場に忍び寄ってくる
MacでLinuxのCIサーバのツールを作ったり、Windowsで作業している人用のツールを
作ったり、OSの壁を超えるのが得意
(その2) APIサーバ
CSSや画像などのアセットを扱う必要がなく、JSONの出し入れだけでいいようなところ、
もしくはバックエンドなどに潜入してくる
省エネ。メモリ使用量も少なくパフォーマンスが出る。メモリ消費が半分になればEC2の
コストは半分に。コア数も減らせればさらに半分に。
Goの卑劣な手口
(その3) キャラクターがかわいいあざとい
危険なGoの侵略を防ぐにはどうすればいいか?
プログラマーという人種が嫌いなものを防波堤にすればよい
画像引用元: http://cd01.hatenablog.jp/entry/2013/03/10/151324
GoとExcelの邪悪な組み合わせを考える
• ExcelをGoの開発環境にしてみる
• 作ってみました
デモ
http://news.denfaminicogamer.jp/projectbook/dungeon
実装の紹介
• github.com/shibukawa/xlsxrange
• B2:D5みたいな文字列を行と列の範囲としてパースするコード
• github.com/shibukawa/xlsxformula
• 数式をASTに分解
• github.com/shibuakwa/xlc
• Excel数式ASTからGoのプログラムに変換するコンパイラ
やっていること
• まずは数式をトークン分解
(10+B6)*5 → ( 10 + B6 ) * 5
• 次に関数呼び出し、式などの木構造に分解
( 10 + B6 ) * 5
• 最後にRange(A1Notationや名前)を参照先のセルに置き換えてコード生成
func Calc() {
return (10 + 20) * 5
}
できること
• 四則演算と ( )
• 特定のA1 Notationを関数の入力パラメータとみなす
• =(B2 * (1 + 0.01 * C2) / D2で、B2を「金額」、C2を「税率」、D2を「人数」のように
外部から与えられる関数とする
(まだ)できないこと
• 関数呼び出し
• 今はそのまま出力しているが、言語の提供する関数とか、Polyfillに置き換える必要あり。
• 複数セルに分かれている複雑な式の再現
• A1 Notationの先にさらに数式が入っていたら、次のように複数行に分けた数式を出力すると
いいかもしれない
result1 := 参照先の式
return result1を使った式
読み書きそろばんエクセル
• 非プログラマーにとっては、誰でも使える構造を持ったデータのエディタ
• XMLをユーザが読み書きする時代は来なかった
• Excelのデータを読み込んで使うだけでもまあ役に立ちます
• github.com/tealeg/xlsx にパッチ送ってformula取れるようにしたのオレオレ
• Google SpreadsheetからもExcel形式で落として利用可能なので共同作業も可
• デモするには地味すぎますが・・・
• 多くの人が使える上に、Excelエキスパートはどの会社にも結構いる
とあるチャットのとある日の会話
A: そういえば、まえ、◯◯の仕事してて、そこの事務のおばちゃんがExcelの
プロフェッショナルで
A: そのおばちゃん、「マクロ書くときは、汎用的な処理をまとめて書いて
おくと便利なんですよ」とか独自に発見してて「うわ、このおばちゃん
ダイクストラや」って驚愕した
S: ダイクストラおばちゃんw
A: 「変数名のルールを決めておくと後々便利」とか、自分でルールを
発見してて 天才か、って思った
W: 傭兵にして□□□□に送り込もう
S: ダイクストラおばちゃん、世の中にもっとたくさん転がってそう
いやマジで、そういうおばちゃん集めてそれなりに訓練させたら、下手な
クソプログラマよりよく働くのではないか
A: たぶんねー
82%ぐらいはジョークですが
• 18%ぐらいは本気
• ソフトウェアのコードって、エラー処理とかビューとかユーザ入力の処理とかサニタイズと
か保存とか同期とかもろもろ抜いていくと、案外コアって小さいですよね
• 税金の計算のシステムも、システム自体は大きいけど、コアの数式ってそんなに多くないで
すよね
• そういうコアの数式を作って、検証したり、バグ修正したりってのはプログラマがやらなく
てもいいのかなってたまに思うわけですよ
• 技術を大事にしてます!という表現がカジュアルに使われるけど、海外の人が作ったものを
使い込む技術、よりも、変なモノを創りだしていける技術を大事にしたい

Weitere ähnliche Inhalte

Mehr von Yoshiki Shibukawa

Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014
Yoshiki Shibukawa
 
JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会
Yoshiki Shibukawa
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
 
つまみぐい勉強法。その後。
つまみぐい勉強法。その後。つまみぐい勉強法。その後。
つまみぐい勉強法。その後。
Yoshiki Shibukawa
 
Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?
Yoshiki Shibukawa
 

Mehr von Yoshiki Shibukawa (20)

Mithril
MithrilMithril
Mithril
 
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsGo & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and Errors
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
 
アンラーニング
アンラーニングアンラーニング
アンラーニング
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
 
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
 
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014
 
大規模JavaScript開発
大規模JavaScript開発大規模JavaScript開発
大規模JavaScript開発
 
Xpjug基調lt2011
Xpjug基調lt2011Xpjug基調lt2011
Xpjug基調lt2011
 
Expert JavaScript Programming
Expert JavaScript ProgrammingExpert JavaScript Programming
Expert JavaScript Programming
 
JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会
 
Pomodoro technique
Pomodoro techniquePomodoro technique
Pomodoro technique
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 
Bitbucket&mercurial
Bitbucket&mercurialBitbucket&mercurial
Bitbucket&mercurial
 
つまみぐい勉強法。その後。
つまみぐい勉強法。その後。つまみぐい勉強法。その後。
つまみぐい勉強法。その後。
 
Erlang and I and Sphinx.
Erlang and I and Sphinx.Erlang and I and Sphinx.
Erlang and I and Sphinx.
 
Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30
 
Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?
 
1日~1週間でOSSに貢献する方法
1日~1週間でOSSに貢献する方法1日~1週間でOSSに貢献する方法
1日~1週間でOSSに貢献する方法
 
儲かるドキュメント
儲かるドキュメント儲かるドキュメント
儲かるドキュメント
 

Excelの話