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

More Related Content

PDF
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
PDF
(JP) GPGPUがPostgreSQLを加速する
PDF
[db tech showcase Tokyo 2016] C32: 世界一速いPostgreSQLを目指せ!インメモリカラムナの実現 by 富士通株式会...
PDF
[D35] インメモリーデータベース徹底比較 by Komori
PDF
普通のプログラミング言語R
PDF
みんなのPython勉強会#35 Pythonのお仕事動向
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
(JP) GPGPUがPostgreSQLを加速する
[db tech showcase Tokyo 2016] C32: 世界一速いPostgreSQLを目指せ!インメモリカラムナの実現 by 富士通株式会...
[D35] インメモリーデータベース徹底比較 by Komori
普通のプログラミング言語R
みんなのPython勉強会#35 Pythonのお仕事動向
今日から始めるGopher - スタートGo #0 @GDG名古屋
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識

More from Yoshiki Shibukawa (20)

PDF
多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
PDF
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
PPTX
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
PPTX
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
PPTX
Golang tokyo #7 qtpm
PPTX
Chunked encoding を使った高速化の考察
PPTX
PPTX
Go & multi platform GUI Trials and Errors
PPTX
FINAL FANTASY Record Keeperを支えたGolang
PPTX
アンラーニング
PDF
東京Node学園 今できる通信高速化にトライしてみた
PDF
Oktavia全文検索エンジン - SphinxCon JP 2014
PDF
Oktavia Search Engine - pyconjp2014
PDF
大規模JavaScript開発
PDF
Xpjug基調lt2011
PDF
Expert JavaScript Programming
PDF
JavaScriptゲーム制作勉強会
PDF
Pomodoro technique
PDF
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
PDF
Bitbucket&mercurial
多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
Golang tokyo #7 qtpm
Chunked encoding を使った高速化の考察
Go & multi platform GUI Trials and Errors
FINAL FANTASY Record Keeperを支えたGolang
アンラーニング
東京Node学園 今できる通信高速化にトライしてみた
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia Search Engine - pyconjp2014
大規模JavaScript開発
Xpjug基調lt2011
Expert JavaScript Programming
JavaScriptゲーム制作勉強会
Pomodoro technique
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Bitbucket&mercurial
Ad

Excelの話