Excelの話

8,706 views

Published on

Excel Compiler

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,706
On SlideShare
0
From Embeds
0
Number of Embeds
6,919
Actions
Shares
0
Downloads
5
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

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%ぐらいは本気 • ソフトウェアのコードって、エラー処理とかビューとかユーザ入力の処理とかサニタイズと か保存とか同期とかもろもろ抜いていくと、案外コアって小さいですよね • 税金の計算のシステムも、システム自体は大きいけど、コアの数式ってそんなに多くないで すよね • そういうコアの数式を作って、検証したり、バグ修正したりってのはプログラマがやらなく てもいいのかなってたまに思うわけですよ • 技術を大事にしてます!という表現がカジュアルに使われるけど、海外の人が作ったものを 使い込む技術、よりも、変なモノを創りだしていける技術を大事にしたい

×