のらねこの気まま暮らし

技術系だけど、Qiita向きではないポエムとかを書くめったに更新されないヤツ

モバイルファクトリー在籍中に開発したOSSの振り返り

この記事はモバイルファクトリー Advent Calendar 2018の17日目の記事です。

どうも、@mizuki_rです。 2018年にモバイルファクトリーを退職して、今は弁護士ドットコムという企業でエンジニアをやっています。

モバイルファクトリーには2011年に新卒として入社して2018年まで8年近く務めました。 その中で、様々なプロジェクトや役回りを任されてきましたが、今日は在籍期間に制作したOSSを供養したいと思います。

代表作

Spica

github.com

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に入るくらい熱量のこもった作品です。もう作れない。

mizuki-r.hatenablog.com

検索したら当時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でかけるってことでこちらを採用。 実際開発中もヘビーに利用していました。

mizuki-r.hatenablog.com

syntagme

github.com

Syntagme is a flux's flamework.

2016年に制作した、fluxフレームワークです。 草案によると「記号化されたfluxを紬、拡張する」ことを目指していたようです。恥ずかしいなこれ。

もともとは、AngularJSにFluxを導入してビジネスロジックを抽象化し、ReactなりRiotなりに載せ替えようっていう媒のツールを目指していました。 いくつかこだわりがあって、「非同期処理を前提とする」「シンプルなReducer」「利用者はActionとReducerだけを考えればいい」「拡張可能」をいかに氏実現するかを考えました。

当時からすでにReduxは存在していましたが、Reduxの複雑性はサーバとフロントを兼任するエンジニアたちにはコストが高いと考え、 よりシンプルな頭で思考停止しても書ける学習コストの低いフレームワークを目指しました。

実際これにより、AngularJSとVueJSの共存が実現し、かつフロントエンドもだいぶ実装しやすくなったので、僕はこのフレームワークを生み出したことを誇りに思ってます。まあ、もう使うことはあるまいが...

speakerdeck.com

Perl

代表作って程いばれるわけではないけど一応書いたぞっていう奴ら。 当時はAmon2にハマっていて、いい感じに欲しいものをプラグイン化したくてかいたのが多いです。

Amon2-Web-Auth-Path

github.com

Set the trigger for each certification path.

2013年。URI単位で認証を切り替えられるヤツ。

mizuki-r.hatenablog.com

Amon2-Plugin-Web-Validator

github.com

Request validator keep it simple controller.

2013年。コントローラーでの煩雑なリクエストバリデーションを簡略化するやつ。 2016年くらいに後輩がこれを更に強力にしたようなヤツ書いてて、あー...ってなった思いで。

mizuki-r.hatenablog.com

Amon2-AccessControl

github.com

2013年。詳細が思い出せない。 多分Auth-Pathをより強力にしたようなやつ。

jQuery

はい、jQuery系ですよ。form周りの処理をいい感じにしたかった。

jquery-fillInForm

github.com

2013年。$form.fillInForm(data)ってしたらそれに紐づくinputを探して値を打ち込む。

jquery-formize

github.com

jquery-formize is form utilities for jquery.

2013年。真面目に書いたやつ。 formのcontrol要素に対してゲッターとセッターをはやしてオブジェクト的に扱えるようにしたやつ。

jquery-pageNavigator

github.com

2013年。たぶんpagerをいい感じにするやつ。

Heimdall

github.com

Heimdall is a form validation module for jquery or zepto.

2013年。温泉発火村での作品。 zeptoのことみんな覚えてる?たしか 仮面の人にzeptoでも使えるようにしない?って提案されて対応した気がする。

フォームバリデーションツールとして、Backbone、jQuery, Zeptoでの利用を想定していた。

mizuki-r.hatenablog.com

そもそもなんで「ヘイムダル」なのか。北欧神話の神が由来で、巨人の軍勢がビフレストを渡ってアースガルズへ侵攻するのを知らせる、という門番の役割を持ってる、ということから。

えもい(恥ずかしい

Backbone系

いぇーーーい、Backboneだぜーーーー!

backbone-pjax

github.com

2013年。BackboneでPjaxしたかった。 jquery.pjax.jsとbackboneを連携しようとして生み出されたヤツ。

mizuki-r.hatenablog.com

backbone-validator

github.com

2013年。後のHeimdall

AngularJS系

AngularJSは1.x系だよ。

angular-statename

github.com

AngularJS Directive for insert the current state name in the DOM.

2015年。ui-routerのstate名を任意のタグに差し込んでくれる。 ページによって背景とかスタイルを大きく変えたいときとかに使う。

angular-scroller

github.com

AngularJS Directive for shorthand of IScroll 5.

AngularJSでIScrollを使いたいときに、いい感じに隠蔽してくれるやつ。

angular-period

github.com

AngularJS Directive for switching the DOM in the period.

2015年。期間の前・中・後に合わせてDOMを出し分けするヤツ。 Dateにハマったとの、setTimeoutに指定できる時間に上限があることを知った。

mizuki-r.hatenablog.com

その他

とくに分類できないけど、せっかく書いたので供養。

action-tracker.js

github.com

The easy-to-use library for Google Analytics's tracking

2015年。GoogleAnalyticsをいい感じにwrapするヤツ。 いらなくね?って後で気づいた。むしろ書いたことを忘れててプロジェクトの中に入ってるのに気づいて「まじかよ...」ってなった。

grunt-xslate

github.com

Compile Text::Xslate template files from Grunt.

2015年。Perl製テンプレートエンジンをあろうことかGruntJSでコンパイルを試みたプロジェクト。 普通にプロジェクトで使ってた気がする。

hubot-scheduler

github.com

Extension of hubot to execute scheduled task.

2018年。指定時刻にhubotに発言させる拡張。 当時slackでpostとかsnippetとかを指定時刻に投稿できなくて必要だった。 確かcronで動いてたWebHookをhubotに移植するときに作ったんだっけな。

今は叛逆性MAのイベントリコメンドに使ってます。

electron-ffp

github.com

2015年。Electronのおためしで作ったプロジェクト。みてみてcoffee-scriptだよ。 ffpはFastFindPositionの略で、minifyされたJavaScriptから任意の位置をすばやく発見するためのツール。

errorログに流れてきたけどそれがどこのエラーなのかわからない!っていうときにつかった。

まとめ

8年に渡って実装してきた公開ライブラリを一気に紹介しました。 これ以外にも僕のリポジトリには作り途中で放棄したライブラリなどが残っており...

こうして振り返ってみると、思いの外向けにライブラリを発信していて(発信力はともかくとして)高いモチベを意地していたんだなと思います。 OSSで作る意義は、先日の吉祥寺pmで@fujiwaraさんが話していて、「これだ!!!」ってなったのでぜひ読んでみてください。

speakerdeck.com

こういったOSS活動を促進してくれる文化があり、またともに意見交換できる環境があるモバイルファクトリーに感謝を。 願わくば、この文化を今後も発展させていってほしいですね!