Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Excelの話

17,538 views

Published on

Excel Compiler

Published in: Technology
  • Be the first to comment

Excelの話

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

×