valid,invalid

関心を持てる事柄について

SPA サービスサミット #1 参加した

SPAサービスサミットとは

ホットスタートアップ、グッドパッチ、ピースオブケイク3社主催のイベント。 http://peraichi.connpass.com/event/42288/

3社のプロダクト(ペライチ、Prott、note)はいずれも知っているものだったのでその裏側の開発話などを聞ければと思って参加した。

React / Angular2 のような目新しいトレンドっぽい話はなく、Backbone.js や Angular.js、jQuery からの移行、CoffeeScript の負債化など、わりと泥臭い話・苦労話が多かった。弊社も Backbone.js から React.js への過渡期なので共感できる面は多い、というか大体同じような悩みがどこにでもあると再認識。

所感

SPA にすべき理由

ペライチや Prott のような、ユーザーの入力が多い、かつ直感的な操作を有するツール系のアプリでの使用例はわりとかっちりハマるというか理にかなっている。一方、読み物中心の静的に近いサイトではほぼ必要ない。

Quipper ではユーザーが触るアプリケーションはほぼ全て SPA。もちろんリッチな画面の実現による UI / UX 向上も目的にはあるが、SPA たる最も大きな理由を聞かれたらマーケットである新興諸国(フィリピン、インドネシア)の貧弱なネットワーク環境への対抗策と答える。

API を共有することにより iOS / Android とともに開発効率を上げる効果もある。

Isomorphic

Google のクローラが Ajax を使ったアプリケーションもちゃんと考慮するようになったと随分前に発表があったが実際の効果を見たところダメっぽく、やっぱり Server Side Rendering が必要なシーンはあるらしい。それが以前なら難しかったが、2016年時点では Server Side rendering は決してチャレンジングではなく現実味のある選択とのこと。

個人的にはまったく必要性に駆られていないのでまだまだ手を付ける気はしてない。(読み物中心の note のようなアプリケーションではもちろん必須)

Browser Support

SPA と直接関係ないが、どこまでサポートするかという話もあったが、ペライチは Chrome のみ、Prott もユーザーにクリエイター系が多いのでモダンブラウザのみというのに驚いた。(IE でアクセスすると Chrome download リンクを表示しているらしい。これは Quipper のプロダクトでもやっている)

Quipper のプロダクトを使うユーザーの中でも特に日本の学校IE のシェアが高く決して無視できない。Pull Request の review の段階で Windows + IE での挙動を確認することもあるし、過去の経験から「このメソッドは IE で動かないよ」みたいな指摘もあったりする。そうした review やテストは存在するが、自動テストでは検出できない領域があるのがクライアントサイドと知っているので、リリース前には人力での IE テストも苦しみながらやっている。

それに比べて、「Chrome にしてね」でしてくれるユーザーが集まる優しいインターネットがあるとは…。

CoffeeScript

ES2015 以降、CoffeeScript が負債というのが共通認識になっていると思った。本体が Active でないだけでなく言語を取り巻く様々なものが相対的に劣化して見えるという不安を多くの人が抱いていた。

登壇者の話だと「ES Lint に比べて CoffeeLint は全然いけてない。そのぶん人間が review でカバーしなければならず、結果的に生産性を落とすことになる」というのも興味深かった。

フロント専業

他社の話を聞くと結構な割合で、フロントエンド(web)・サーバサイドのエンジニアが分業している開発スタイルを採用しているようだが、そんなにフロントエンドエンジニアを採用できるのだろうか…とふと疑問に思った。

弊社も以下のような求人を Wantedly に掲載しているが、フロントエンドエンジニアの募集は応募者数 / PV 比率が圧倒的に低い。PV はそこそこあるので関心は集めていそうだが応募が少ない。

英語を身に着けたいサーバーサイドエンジニア募集 - Web Engineer jobs at Quipper Ltd - Wantedly

(教育☓グローバル)フロントエンドが得意なweb developer募集! - Engineer / Programmer jobs at Quipper Ltd - Wantedly

この謎を解いて採用につなげたい。(仮説はある)

その他

知らなかった技術要素など。

  • Aurora DB

    MySQL 5.6 と互換性を持ち、かつ MySQL の5倍のスループットを発揮する Amazon のデータベース・サービス。note のバックエンドで使っているらしい。寡聞にして知らなかったのだが、流行って無いのだろうか?

    https://aws.amazon.com/jp/rds/aurora/details/

  • Side CI

    GitHub と連携可能な静的解析ツール。セキュリティ issue や Lint 的な観点から、指摘を Pull Request に自動的にコメントしてくれる。ペライチで使っているらしい。

    https://sideci.com/ja

jQuery の古いバージョンでは SVG の class 属性を操作する API の一部が使えない

複数サイトを管理していて、片方のサイトでは動くのにもう一方では動かない以下のようなコードがあった。

$svg('svg.target')
$svg.toggleClass('hide')

jQuery 2.2 and 1.12 Released | Official jQuery Blog を見るに、以下のバージョン以上であれば動くとのことなのでバージョンを揃えて回避する。使えるようになったのは .addClass(), .removeClass(), .toggleClass(), .hasClass()


完全に操作できないかというとそうではなく回避する方法もあるようだが使い勝手が悪い。

css - jQuery SVG, why can't I addClass? - Stack Overflow

Mac の VirtualBox に Windows のイメージをインポートする

検証のために MacWindows VM を入れないと…と思って数ヶ月経過し、ようやく入れることにした。

必要な時にはダウンロードを待つことが出来ずに検証用の実機で済ましてしまい、その時が過ぎれば忘れてしまう…この繰り返しでなかなかやる気が起きなかった。

早速 MicrosoftVM Download ページへ行く。

developer.microsoft.com

必要なバージョンを選んで Download .zip 押す。

数分待つ。DL 終わる。ファイル名見たら Mac 用ではなく Windows 用の zip ファイルぽい。 うーん、と思って調べると同じ事象に引っかかった人が何件か見つかり、やはり OS が誤判定されているぽい。パスの WindowsMac に書き換えてやり、直接 DL する。

https://az412801.vo.msecnd.net/vhd/VMBuild_20141027/VirtualBox/IE11/Windows/IE11.Win7.For.Windows.VirtualBox.zip

https://az412801.vo.msecnd.net/vhd/VMBuild_20141027/VirtualBox/IE11/Mac/IE11.Win7.For.Mac.VirtualBox.zip

その後は特にハマることもなく解凍した ova ファイルを VirtualBox でインポートして VM を起動することができた。

その他、クリップボードや言語の設定は Mac+VirtualBox+仮想マシン(旧modern.IE)でIEとEdgeの確認を行う方法 - 情報系大学院生のWebメモ が詳しくて参考になった。

『RESTful API の設計のキホン』 by Cside 読んだ

わかったつもりの知識の復習になったうえ、新しい気付きもあってよかった。

だいたい、基本的なところを「ふむふむ、そうだよな。わかるわかる」と思いつつ読むが、アンチパターン集を見ると「やってしまっている...」となる。

悪い例として挙げられたもののうち以下の4つは過去にやったことがあり、直したい気持ちが湧いた。

  • レスポンスがフラットな配列
  • 動作を URI に含める
  • Limit-Offset のページネーション
  • 要求に失敗してるのに 2XX を返す

特にページネーションは、最初のうちは気付かないがデータやユーザーが増えるにつれ実現したくなることが多い。こういうのも視野に入れた設計・実装・レビューをしていきたい。


直したい気持ちを湧かせながらコードを眺めたら、API を複数のクライアント(web / native)で共有しており、互換性の問題ですぐには直せないことに気付いたりした。スピードも大事だが、最初の設計は本当に大事だ...。

jQuery セレクターのエスケープにはバックスラッシュを使う

以下のような HTML 要素がある時に

<input type="text" id="hatena.jp" />
$('#hatena.jp')

上記のセレクターではこの要素を取得できない。 id == "hatena.jp" ではなく id == "hatena" && class.include?('jp') にマッチする要素を探してしまう。

メタ文字 (!"#$%&'()*+,./:;<=>?@[\]^{|}~) を含む場合は\` (two backslashes) でエスケープする必要がある。

$('#hatena\\.jp')

そもそもこうした文字を含まないよう実装すべきとは思うものの、id や class ではなく data attribute あたりだと気づかずに起こったりしそう。

参考

javascript - How do I get jQuery to select elements with a . (period) in their ID? - Stack Overflow

Selectors | jQuery API Documentation

最近の文化活動

Hulu 解約して Netflix 契約した

Hulu のラインナップで気になるものはだいたい見てしまい、ぱっとしなくなってきたので乗り換えた。

涼宮ハルヒの憂鬱』アニメ1期を見た

何の因果か2016年にもなって全話見直した。

1期が放送された2006年は高校2年生の時だった。通っていた高校が全国オタク比率ランキング2位*1の男子校だったので、能動的にアニメやゲームを摂取しなくても自然と流行情報が手に入った。SOS団○○高校支部とかも見たし、なぜ男子校を選んでしまったんだという後悔の念に取り憑かれた奴もしばしば観測された。

そんな中、他のどのアニメも見なくていい、これだけはとゴリ押しされたのがハルヒだった…。(そのあと結局ライトノベルもゴリ押しされて全部借りて読んだ)

今見返すと何もかもが懐かしい、というか何もかもがミーム

ひぐらしのなく頃に』漫画を読んだ

何の因果か2016年にもなって出題編と解答編を全部読んだ。

これも高校生の頃に盛り上がってた。その頃、原作のノベルゲームを出題編だけちょろっとやって漫画も部活の合宿時に友達から借りて読んだのだが、作品を全部味わう前にネタバレを 2ch か何かで見てしまい、読むのをやめてしまった気がする。

ペルソナ4, 5と並行して楽しんだところ、「"絆"が鍵」というテーマがけっこう重なっていると思った。

シュタインズゲート』アニメを見た

何の因果か2016年にもなって全話見直した。

これは確か大学生の時に見た。 全国オタク比率ランキング2位の男子校から大学に進学すると周囲の環境が変わり、あまりアニメを見なくなってしまった。大学時代に見たアニメは数えるほどしかないんだが、何で見ようと思ったんだっけ。原作のゲームをプレイしてた奴に勧められたような気もする。

今見返すと何もかもが懐かしい、というほどの思い入れは無いけどやっぱり面白かった。

ペルソナ4』アニメを見た

後述する『ペルソナ5』を予約し、発売日9/15まで待ちきれずにこっちを見てた。

とにかく良い OP

www.youtube.com

まあまあ面白かったけど戦闘があっさりしていたり展開が遅いと思えば最後は駆け足だったり、ゲームの方が面白いだろうな…と思った。 というか RPG のアニメ化って難しいんだなと思った。

ペルソナ5』を買った

これまで女神転生シリーズもペルソナシリーズもやったことなかったが、YouTube に幾つもある公式 PV を見てたら気づいたら買っていた。

とにかく良い OP

www.youtube.com

とにかく色々詰め込んで引きの強い PV

www.youtube.com

90時間かけてクリアし、即2週目に入った。特に説明はしませんが最高です

*1:出典見つからなかったが10年前にどこかで見た。難関校 - アンサイクロペディアにも書いてなかった。