モバイルファクトリー在籍中に開発したOSSの振り返り
この記事はモバイルファクトリー Advent Calendar 2018の17日目の記事です。
どうも、@mizuki_rです。 2018年にモバイルファクトリーを退職して、今は弁護士ドットコムという企業でエンジニアをやっています。
モバイルファクトリーには2011年に新卒として入社して2018年まで8年近く務めました。 その中で、様々なプロジェクトや役回りを任されてきましたが、今日は在籍期間に制作したOSSを供養したいと思います。
代表作
Spica
Spica - the HTTP client for dealing with complex WEB API.
2013年に制作した、複雑なAPIクライアントを簡易化するOSSです。 なんでスピカって名前だったのかはもう覚えてない。
当時複数キャリアや様々な外部APIとの通信が必要なプロジェクトにおり、 APIごとに異なるフォーマットや命名規則をModel層に持ち込むことが嫌で実装しました。
APIのリクエストをORMのようにラップし、共通のI/Fでリクエスト、IteratorとRowクラスを返し、 APIの仕様で閉じた実装を隔離するためのモジュールです。
APIから受け取った情報をビジネスロジックで運用したいのに、 なぜ整形処理や変換処理をビジネスロジックでやらねばならんのかと。 外部APIが連携することでテスト不能になっていいのかという思いで作りました。
僕の中ではトップ3に入るくらい熱量のこもった作品です。もう作れない。
検索したら当時YAPCでLTしたときの動画が出てきて震えた。
hariko
GitHub - rymizuki/node-hariko: Mock Server that implements the API Blueprint specification.
Mock Server that implements the API Blueprint specification.
2015年に制作した、API-Blueprintの仕様に基づくモックサーバーです。 張り子。ハリボテを用意するツールなので。命名したのは@nekobatoくんです。
当時の開発フローがフロントエンドで情報設計とプロトタイピングの後にAPI実装という流れだったので、 APIをモックサーバで代替する必要がありました。 しばらくJSONベースの簡易モックサーバを運用して、しかしドキュメンテーション不足を感じたので、 ドキュメントとモック、あわよくばテストデータをかね揃えるツールが欲しいとなり作りました。
当時、API-BlueprintとSwaggerが勢力を二分していた(はず)時期で、Markdownでかけるってことでこちらを採用。 実際開発中もヘビーに利用していました。
syntagme
Syntagme is a flux's flamework.
2016年に制作した、fluxフレームワークです。 草案によると「記号化されたfluxを紬、拡張する」ことを目指していたようです。恥ずかしいなこれ。
もともとは、AngularJSにFluxを導入してビジネスロジックを抽象化し、ReactなりRiotなりに載せ替えようっていう媒のツールを目指していました。 いくつかこだわりがあって、「非同期処理を前提とする」「シンプルなReducer」「利用者はActionとReducerだけを考えればいい」「拡張可能」をいかに氏実現するかを考えました。
当時からすでにReduxは存在していましたが、Reduxの複雑性はサーバとフロントを兼任するエンジニアたちにはコストが高いと考え、 よりシンプルな頭で思考停止しても書ける学習コストの低いフレームワークを目指しました。
実際これにより、AngularJSとVueJSの共存が実現し、かつフロントエンドもだいぶ実装しやすくなったので、僕はこのフレームワークを生み出したことを誇りに思ってます。まあ、もう使うことはあるまいが...
Perl系
代表作って程いばれるわけではないけど一応書いたぞっていう奴ら。 当時はAmon2にハマっていて、いい感じに欲しいものをプラグイン化したくてかいたのが多いです。
Amon2-Web-Auth-Path
Set the trigger for each certification path.
2013年。URI単位で認証を切り替えられるヤツ。
Amon2-Plugin-Web-Validator
Request validator keep it simple controller.
2013年。コントローラーでの煩雑なリクエストバリデーションを簡略化するやつ。 2016年くらいに後輩がこれを更に強力にしたようなヤツ書いてて、あー...ってなった思いで。
Amon2-AccessControl
2013年。詳細が思い出せない。 多分Auth-Pathをより強力にしたようなやつ。
jQuery系
はい、jQuery系ですよ。form周りの処理をいい感じにしたかった。
jquery-fillInForm
2013年。$form.fillInForm(data)
ってしたらそれに紐づくinputを探して値を打ち込む。
jquery-formize
2013年。真面目に書いたやつ。 formのcontrol要素に対してゲッターとセッターをはやしてオブジェクト的に扱えるようにしたやつ。
jquery-pageNavigator
2013年。たぶんpagerをいい感じにするやつ。
Heimdall
Heimdall is a form validation module for jquery or zepto.
2013年。温泉発火村での作品。 zeptoのことみんな覚えてる?たしか 仮面の人にzeptoでも使えるようにしない?って提案されて対応した気がする。
フォームバリデーションツールとして、Backbone、jQuery, Zeptoでの利用を想定していた。
そもそもなんで「ヘイムダル」なのか。北欧神話の神が由来で、巨人の軍勢がビフレストを渡ってアースガルズへ侵攻するのを知らせる、という門番の役割を持ってる、ということから。
えもい(恥ずかしい
Backbone系
いぇーーーい、Backboneだぜーーーー!
backbone-pjax
2013年。BackboneでPjaxしたかった。 jquery.pjax.jsとbackboneを連携しようとして生み出されたヤツ。
backbone-validator
2013年。後のHeimdall
AngularJS系
AngularJSは1.x系だよ。
angular-statename
AngularJS Directive for insert the current state name in the DOM.
2015年。ui-routerのstate名を任意のタグに差し込んでくれる。 ページによって背景とかスタイルを大きく変えたいときとかに使う。
angular-scroller
AngularJS Directive for shorthand of IScroll 5.
AngularJSでIScrollを使いたいときに、いい感じに隠蔽してくれるやつ。
angular-period
AngularJS Directive for switching the DOM in the period.
2015年。期間の前・中・後に合わせてDOMを出し分けするヤツ。 Dateにハマったとの、setTimeoutに指定できる時間に上限があることを知った。
その他
とくに分類できないけど、せっかく書いたので供養。
action-tracker.js
The easy-to-use library for Google Analytics's tracking
2015年。GoogleAnalyticsをいい感じにwrapするヤツ。 いらなくね?って後で気づいた。むしろ書いたことを忘れててプロジェクトの中に入ってるのに気づいて「まじかよ...」ってなった。
grunt-xslate
Compile Text::Xslate template files from Grunt.
2015年。Perl製テンプレートエンジンをあろうことかGruntJSでコンパイルを試みたプロジェクト。 普通にプロジェクトで使ってた気がする。
hubot-scheduler
Extension of hubot to execute scheduled task.
2018年。指定時刻にhubotに発言させる拡張。 当時slackでpostとかsnippetとかを指定時刻に投稿できなくて必要だった。 確かcronで動いてたWebHookをhubotに移植するときに作ったんだっけな。
今は叛逆性MAのイベントリコメンドに使ってます。
electron-ffp
2015年。Electronのおためしで作ったプロジェクト。みてみてcoffee-scriptだよ。 ffpはFastFindPositionの略で、minifyされたJavaScriptから任意の位置をすばやく発見するためのツール。
errorログに流れてきたけどそれがどこのエラーなのかわからない!っていうときにつかった。
まとめ
8年に渡って実装してきた公開ライブラリを一気に紹介しました。 これ以外にも僕のリポジトリには作り途中で放棄したライブラリなどが残っており...
こうして振り返ってみると、思いの外向けにライブラリを発信していて(発信力はともかくとして)高いモチベを意地していたんだなと思います。 OSSで作る意義は、先日の吉祥寺pmで@fujiwaraさんが話していて、「これだ!!!」ってなったのでぜひ読んでみてください。
こういったOSS活動を促進してくれる文化があり、またともに意見交換できる環境があるモバイルファクトリーに感謝を。 願わくば、この文化を今後も発展させていってほしいですね!