STIって知ってる?クルマじゃないよ!
今日は研究半分、趣味で作ってるRailsアプリ半分って感じでした。
土曜にしてはめずらしくちゃんと朝起きて集中して作業してた。素晴らしい。
STIって知ってる?
SUBARU TECNICA INTERNATIONALではないです。
Single Table Inheritance、略してSTIというらしく、日本語に直すと単一テーブル継承と言うらしいです。
一つのテーブルに対して、複数のモデルを持たせることができるというもの。(説明がへたくそ)
こちらの記事が大変わかりやすかったです。Musicというモデル、musicsというテーブルがあったときにMusicを継承したJazzとかPopを作り、親テーブルにtypeというカラムを持たせてあげるだけで、あたかもJazzやPopというモデルがあるかのごとく扱うことができるというものらしい。
実際にいろいろとやってみたのですが、一部のサブクラスにだけhas_many
をつけたり、validate
を書いたりとかもできるので、テーブルを増やしたくないけど他のカラムの状況に応じてバリデーションを変えたいみたいなときに使うとスマートにできてかなり良さげです。
User作るときとかにroleとかいうカラム作ってその値に応じて処理変えたりとか今まで幾度となくやった気がしますが、これを知っているとかなりいい感じにできそうでマジでいいと思った。
Serializeというのも知った
またRails(というかActiveRecord)の話。
Serializeというのを使うとtext型のカラムに好きな型のデータを突っ込めるらしい。
配列とかを突っ込むとYAMLでカラムに流し込まれるとのこと。検索とかしないデータであれば悪くないのかもしれないですね…。
雑談
Macが帰ってきて捗るぜ。
■
console.table()
がとっても便利なお話
オブジェクトの配列を表示するときにちょっと便利なわざ。
こんな感じで表示することができます。いい感じですね。
(ちなみにChrome DevToolsであれば、単にtable()
でも大丈夫です)
どのバージョンだったか記憶が怪しいですが、Node.jsでもconsole.tabel()
に対応したみたいなはなしを見た気がします。
Macが例のキーボード修理からかえってきた
MacBook および MacBook Pro キーボード修理プログラム - Apple サポート
これから帰ってきた。月曜夕方に出して今日(金曜)の夕方に修理完了の連絡がきたので、5日というスピード感。大変ありがたい。
キーボードを交換するとトラックパッドなどもまとめて交換されるので、めちゃくちゃピカピカになりました。
キートップの塗装?剥がれてきてたりキーがテカってたりしてたのがなおってうれしい。
今回の修理、本来は5万円越えらしいです。怖。
雑談
やっぱ金曜はダメだなぁ…。時間が取れないことを言い訳に何もやらないですごしてしまう癖をなんとかしないと本当に死ぬしかなくなっちまう
マジでただの日記
木曜なのでSAをやってたよ。今のご時世、Swingなんて知るかよ〜〜って感じだった。
CLIツールを作るコツみたいな話
とある事情でCLIツールを作ろうかなぁと思った(が、探したら既存だったので作るのはやめたのだが)
その時に出会ったスライドが非常に素晴らしかったのでメモ。
そういえば少し前にSpeaker Deck見た目変わってすごいいい感じになりましたよね。見た目以上に、スライドの読み込みが速くなったのが嬉しい。
zeitのドメイン販売が凄すぎる
まぁサイト見て欲しい。
コマンドラインでドメイン買ってDNSレコードの設定まで出来ちゃうとかヤバくねこれ。
雑談
SAやらなんやらやってるとどうしてもアウトプット少なくなっちゃうのマジでなんとかしないとな。
esareaというChrome Extensionが完全に神だった件
3日連続でesaの話かよ、と思わずに聞いてほしい。
esaはご存知Markdownで情報共有ができるサービス。Webインタフェースしかないが、そのMarkdownエディタがとても良く考えられて作られていて、書いていてストレスがない。
多分今まで出会ったどのMarkdownエディタより快適に書けている。(気がする。)
最近だとメモ書き意外にもMarkdownを書く機会がある。たとえばGithubのissueとかこのブログ(はてなブログ)も僕はMarkdownモードにして使っている。
ただ大した補完も無く、特に日本語を使っている人にとってMarkdownの箇条書きは割と苦痛だと思う。(-
を打つたびにIMEを切り替えないといけないし、階層下げるのもスペース連打しないといけない)
そこでesarea。
esaの作者さんが開発しているっぽくて、esaライクなMarkdown補完が他のサービスのtextareaでも使える。完全に神。
動作している様子とソースコードは以下で見られる。
表の補完もできるし(ブログで表使うことはほぼないが)マジで良い。早く知りたかった。
Pukiwiki -> esa.ioに気合いで移行した日記
昨日に引き続きやってた。
結論から述べると、なんとか移行はできたがやはりいくつか不完全な点が出てしまった。反省点を列挙する。
反省1 スクリプトなぐり書きしすぎた問題
既存のPukiwikiから記事を引っこ抜く部分に関しては別スクリプトで書いてあって、そのスクリプトが吐き出すJSONを読み込んでesaに対してリクエストを投げるだけなので大した処理にならないだろうと思ってつらつらと手続き的なコードを書いてたのですが、結局考慮しないといけないことがたくさんあって出来上がったスクリプトは132行。もはやバグっても修正不能…。
完全に事前の想定をミスったなぁと思いました。結局移行スクリプトが途中で落ちてesaのチーム作り直したりする羽目になりました。悲しい。
反省2 想定甘すぎ問題
前述の"考慮しないといけないこと"について。僕が引っかかったのはこの辺。
- Pukiwikiに画像を貼ると自動的に画像に対してリンクがついてしまうのでそれを外す必要があった
- 記事内の
#xxxx
やmailto:
などの扱い。特に多かったのが、SSHのコマンドなどを示してる箇所でssh [username]@exmaple.com
みたいなのを勝手にメアドとして判断してmailto:をつけてくれちゃってるパターン。つらい。 - HTML -> mdのライブラリが微妙に不完全だった。esaの採用してるmdは表の横線が必須のようで、全部の表がおかしくなってしまうといった事態が起きた。gemに手突っ込むか正規表現とかで引っ掛けてお茶を濁すしかないなぁという感じ。
反省3 途中でスクリプトがコケることを考慮していなかった
途中でコケると全部やりなおさないといけない作りになっていた。
esaのAPIは15分で75回しか叩くことができないので再開できる機構がないと何かあった時に厳しい。
という感じだろうか。とりあえず不完全な状態ながら移行はできたので、それを使ってみてもらいつつ、好評なようならちゃんと移行スクリプトのバグを取りつつもう一回トライしたいなぁという感じ。
そのときはちゃんと処理を細かく切り出してテストとか書きながらやりたいなと思いました。こういう求めてる結果がはっきりしててかつ泥臭いロジックが絡み合う感じの処理を書くときはテストちゃんと書いた方がかえって楽なのではないかと思った今日この頃でした。
Rubyガッと書いてPukiwikiの記事を引っこ抜く
月例会があったので今日のメインはそれだった。
研究の方はとりあえず中間発表乗り越えられそうな目処がついた気がする。頑張っていき。
Ruby
研究室のwikiがレガシーすぎてまともに更新されなくてヤバみが深いのでmdで書けるいい感じのサービスに移行したいねーって話が最近ホットなのでPukiwikiから既存の記事を引っこ抜くスクリプトを書いてた。
(公開したいところではあるんだが、研究室の独自の認証モジュール関連のコードとかがあるので微妙っぽい。いい感じに移行できたら載せる)
Pukiwikiの記法→mdに変換するパーサーを書こうかと一瞬血迷ったけど、レンダーされたHTMLをmdにした方がスマートっぽいよね、(HTML→mdが最悪上手くいかなくてもHTMLのまま新サービスに投げれば表示されるという意味もあり)ってことでnokogiri使ってギコギコと記事本体の部分だけをスクレイピングしたりしてた。
なんだがいい感じに記事を引っこ抜くことはできた。
移行先として検討されてるのはおそらく下記の3つ
まずGrowi、これはOSSなのでオンプレで使えるのが嬉しい。APIもあるっぽい話を聞いた気がするのでインポートは楽そう。(オンプレなら最悪DBに直接書き込むとかいう技も使えるし)
次、esaさん。これは僕のお気に入り。(個人的に契約してる)
研究室単位なら無料で使えるらしいし、トリかわいいしここに移行したい。
APIあるのでそれを叩きまくれば移行できそう。
kibelaはesa同様にオンラインサービス。使ったことないのでなんとも言えないが、とりあえず現時点ではAPIが無いので移行が大変そう。ヘッドレスブラウザから記事投稿しまくるか????
とりあえず僕はesa激推しなので無料体験でチーム作ってひっそりwikiの全記事移行した上で「どうっすか!?移行しましょう!?」ってやるつもりで引っこ抜いたデータをesaのAPI叩いてもりもりインポートするコードも並行して書いてみてます。
概ね動くところまでこぎつけたものの、画像がネック。既存のwikiは研究室のアクセス認証下じゃないとリクエストを弾いてしまうのでなんとかして画像を認証の外に移動しないとなぁという感じです。(esaは画像のストレージとしてs3使ってるっぽいが、そこにAPI経由で画像を上げることはできなさそう)
とりあえず画像のパス抽出した上でダウンロードしてどこかアクセス認証外のサーバーに上げてお茶を濁そうかなと思います。
あとは適当にAPIリミットで一旦リクエストを止めるような制御をかませば大体終わりかなという感じ。
こういうの、楽しくて良いですね。
さよならMacBook
MacBook剥ぎ取られました。
嘘です。例のペチペチキーボードの不具合の修理をアップルがキャンペーンとして発表したので修理に出してきました。
1週間くらいで戻ってくるらしい。
雑談
wikiの移行スクリプト書いてたらなんだかとっても元気になりました。
そもそもプログラミング始めたのって面倒なこと、大変なことを効率よくやるためだったような気がして、割と原点に立ち返ってる気持ち。
コードかけるだけでその辺の書けない人の何万倍も同じ仕事するのに時間短縮できると思うとすごいことやなと、今更ながら。