Seiichi Yonezawa

“How creativity is helped by failure”

メリークリスマス!

今年のクリスマスは3連休でした。今日はその最終日で、YouTubeのクリスマスソングを流しながらゆっくり過ごしています。暖炉があればもっとそれっぽいクリスマスを過ごせるんですが、寒くなければ問題はないでしょう。このサイトも未だにRails 5に移行できずにいるので、相変わらず更新も滞りがちな今日この頃。そんな中、昨日ダイキャストの車の模型を買いました。車種はシボレー・シェベルというそうです。同じシボレーならコルベットとかカマロにすれば良かったような気もしましたが、なんとなくこの外観のほうがよく見えたのです。あんまり技術的ではありませんが、それもクリスマスならではでしょうか。

開発日記 #29

最近モチベーションが低下しつつあって、まだRails 5の移行が完了できそうにありません。どうも休日はRails 5の移行作業を完成させるよりも、違うことをやりたいと思うのですが、そうこうしているうちに日が暮れてしまうようです。

このサイトの構成をもう少し考えてみたのですが、右上にいわゆるログインフォームのリンクが常に表示されています。これをドメイン毎に区切ろうかと思ったのですが、のちのちの管理が煩雑になりそうなので断念しました。

また、現在はヘッダにETag等を表示するようにすると、さらにレスポンスが快適に感じられるようになりました。ただし、これも開発環境で挙動を確かめようとすると、テンプレートを編集するときに毎回強制更新しなければならないので、これはこれで厄介です。ブラウザの機能で拡張機能を開いている時はキャッシュを無効にするというオプションがあるのですが、これを毎回出すのと思うと面倒です。理想なのは1行のコードで無効と有効を切り替えられるといいのですが、おそらく現状よりもレスポンスの向上は見込めそうです。

Rails 5に移行するにあたって、単にバージョンを変えるだけに留まっていないので、masterブランチから既に44コミットも差があります。マージするときにsquashする予定なのでコミットは減ってしまうのですが、それでもなかなかリリースに至れていないのが辛い。

開発日記 #28

今日は朝の更新です。平日は夜遅くまで起きてしまうリスクを回避しようと思ったのですが、今日は比較的功を奏していると思います。また、今週は何かとGitHub上のコミットも少ないので何もしていないように見えて、実はこのブログのRails 5以降を着々と進めています。主に新機能を追加するよりも、主にリファクタリングをしています。たとえば現行サイトではJournal, Article, Noteという3つのクラスが主に存在しているのですが、予定ではこれにResourceを追加して、それぞれに権限を振り分けようと思っています。Noteは完全にプライベートなので公開されず、Journalは個人的なものなので公開のみ、Articleはコメントを追加できて、Resourceは誰でも編集可能ないわゆるBlikiみたいなものを目指そうかと思っています。なぜ単一のクラスでやらないかというと、ifがたくさん必要になるのと、オブジェクト指向っぽくないからです。

現状は日記中心ですが、もう少し実用的なサイトにしたいなぁと思う次第です。

開発日記 #27

今週は旅行があったので、比較的早く休みを迎えることができてラッキーと思っていたのですが、残念ながら肝心のやる気が出ませんでした。唯一やったことといえば、ファイル管理しているRailsのアップローダー方式を間接的に変更したことでしょうか。Tusそのものはそこまで悪いとは思わないのですが、やはりNginxの設定等もあるので、いざ容量の大きいファイルをアップロードしても、OSがスタンバイする等のトラブルで失敗してしまったりするようです。なので、アップロードはSCPを使うことにして、ローカルでファイルを追加できるようにしました。なんというか、せっかくTusを実装したのに意味がなくなってしまって悲しい限りです。

それと、水面下でこのサイトをRails 5に対応し始めようとしたのですが、先述の通り今日は全く続きをやる気力がなかったのでまだしばらく今の状況が続きそうです。

開発日記 #26

12月4日に1泊2日の観光旅行に行きました。初めて伊勢神宮で「お伊勢参り」を果たしてきたのですが、開発日記の趣旨にあまりそぐわないけれどこういった公開サーバーにもアップロード機能をつけてみることにしました。現段階ではAmazon S3のようなサービスを使わずに、そのままpublicディレクトリに保存してあります。ユーザー毎にパーミッションをつける必要もないですし、というよりもユーザーは私一人なのでこれがもっとも妥当でしょう。

アップローダーにはPaperclipを使おうと思っていましたが、今後はShrineの拡張性に賭けてみたいと思います。しかし、旅行から帰ってすでに4日目ですがtusとかSinatraばかり触ってたせいかほとんど忘れてしまい、実装までに時間がかかってしまいました。さすがにこのブログもいいかげんRails 5にアップグレードしたいし、でもなぜか上手くいかないと試行錯誤していました。せっかくつけたアップロード機能も例えば位置情報からマップを出すとか、簡単な編集機能をつけたりとかやろうと思うほどアップグレードが遠のくという。それにいい加減ログインと表示は分離したいですし、この忙しい時期にまだまだやりたいことがたくさんある今日この頃です。

開発日記 #25

先ほどShrineで大容量のアップロードする方法という投稿を終えたばかりですが、では実際にルーターで共有しているサーバーにデプロイしてアップロードを試してみました。開発環境ではそんなに問題らしき問題は起こらなかったのに、いざデプロイしてみると問題が起こるのは世の定めなのでしょうか。実際のファイルはやれヘッダが違うだとか、サイズが大きすぎるなどといった問題が出てきました。Railsの時に起こっていない問題は基本的にNginxの問題なのですが、正直Nginxはポートフォワーディングだけしてくれればいいので、あまりこういったトラブルには巻き込まれたくなかったです。それからファイルサイズの上限を変更してみたりしたのですが想像以上にWiFiネットワークが遅いということも相まって、SFTPでファイル送信する方が速いような気がしてきました。

ということは、自ずとブラウザ以外の選択肢も視野に入れる必要が出てきたりします。もちろんブラウザでバックグラウンド処理が出来れば一番いいのですが……。今のところ公式のJavaScriptのライブラリをNode.JSのクライアントとして使うか、PythonのクライアントをRubyで書き直してみるかという選択肢がありそうです。こうしている今も辛うじてアップロードは進行しているようなので、やたら遅いという以外は急ぐ必要はなさそうな気もしつつありますが、いわゆる銀の弾丸だと思って期待していただけに少々残念です。

また、唐突ですが明日は旅行に行くことになりました。旅先でコーディングは果たして捗るでしょうか?

開発日記 #24

昨日の開発日記を書き終えてすぐにAmazon LightSailの契約をしてみました。例えばこのサーバーはDigitalOceanでデプロイされていますが、料金体系やサービス内容はほとんど同じです。ワンクリックでWordPressがインストールできるという強みがあるのですが、これもいずれDigitalOceanが似たようなサービスを展開するかもしれません。というよりも、WordPressそのものだったら他のサービスもすぐにWordPressが使えることをウリにしていたりしますよね。例えば、Media TempleもWordPress専用のプランならば月額20ドルです。こちらはストレージが30GBなので、ストレージだけで見るならLightSailのほうがお得かもしれません。(ただ問題はよほどWordPressで30GBも使いきれるのかとは思いますが)

それで今回WordPressに注目した理由はRailsを動かすのに5ドルのプランではRAMの容量が不安で、少ないRAMで動かすなら必然的にNodeJSとPHPしか選択肢に残りません。NodeJS、とくにMEANスタックというのも興味があったのですが、残り数時間もないのにセットアップできるかどうかも怪しい。そしてPHPというかWordPressくらいしか知らなかったので結局は自然な成り行きでしたね。

張り切ってインストールしてみたはいいものの、SSH経由でアクセス出来なかったり、Ubuntuが14.04だったり、そもそもbitnamiというサービスに若干不信感を抱いていたりしたのですが、結局はインストールしても特に目的がありませんでした。もちろんRAMも512MBしかないので快適とは言い難い。幸い1ヶ月は試用期間なので早々に飽きてしまいそうです。やっぱり5ドルで運用するのは現実的ではないのかもしれませんねぇ。

それと、今日は検索バーでおなじみのjQuery UI Autocompleteを実装してみました。自分で作るみたいな流れになりかけてたのですが、いざCSSとか書いたりすることを考えるとすごく面倒に思えてしまいました。その点jQuery UIはBootstrapと併用しているプロジェクトを経験した時すごく面倒だったのでもう利用することはないと思っていましたが、今回は上手く合致しました。相変わらず書いててかなりjQueryに依存している感じは否めませんが、結果オーライということで。あと今日はいつもよりも前倒しで書いているのでこの後もおそらく続きます。

開発日記 #23

今年もいつのまにやら12月になっていて、今年も相変わらず早かったなぁと思うところであります。さて、GameOffは何度か話題に出していますが、今回はいわゆる企画倒れになってしまいました。(実力不足で書けてないわけではないと言い聞かせつつ)それで、代わりにまた今月は挑戦というほどでもないですが、12月にはアドベントカレンダーというものがありますね。今年はいつにも増して外との交流がなさ過ぎるので世の動向がどうなっているのかはわかりません。確か一昨年あたりに一人アドベントカレンダー企画として毎日記事を投稿するみたいな挑戦をしたのですが、結果は最後の最後で力尽きてしまいました。

そんなわけで今年は本来の?アドベントカレンダーに忠実なものをやりたいということで、公開する側ではなく、公開するためのツールなるものを作れるのではないかと閃いたわけです。とはいえ、タイミングとしては11月中頃に公開して、今頃使ってもらえたらなんてのが理想な気がします。確か七夕に公開したサイトも1日で作ろうとしました。だいたい数時間で満足のいくサイトが作れたら苦労しませんね。

そんなわけで、昨日の今日で、tusアップローダーと掛け持ちしつつぼちぼち進めて行きたいなと思ってます。それで、明日は業務の方でも面白そうな企画があるようなのでその更新もしようかなと考えています。

開発日記 #22

SinatraのTusサーバーがある程度うまく出来てきたので、改めてRailsでアップローダーを書き直しています。そのままSinatraを使っても良かったのですが、やはりpassenger等のデプロイが便利なので実用するのであればRailsを採用したいのです。

デモにあったJavaScriptをCoffeeScriptに書き直すのもそこそこ面白いなぁと思って、アップロードの挙動は割とうまく行きました。しかし、その調子でShrineも使えるようにしようと思ったら何故か上手くいきませんでした。Shrineが利用するJSONにうまく合致していないのが原因なのはもちろんなのですが、Shrineが面倒を見てくれる部分がブラックボックスになっているような感じなのでよくわかりませんでした。

もう少しで上手くいくと思ったんですが、残念ながら時間です。12月までには間に合わせたかったのですが、もう少し続けてみようと思います。まあ、まずはShrineを一度諦めてRailsで直接保存してから様子見るべきなのかもしれませんね。

開発日記 #21

昨日は調子が悪く、一日中横になっていました。深夜に復活したのですが、さすがにそのまま寝られるわけもないので、気づいたらすっかり朝の7時でした。決まって夜は集中できるのですが、これから1日が始まるんだと思うと憂鬱です。それで、今回の題材は以前取り組もうと思っていたtusサーバーのRuby版がありました。また、ShrineとRodaを組み合わせたShrine Tus Demoは同じくShrineのJanko Marohnićさんにより公開されています。S3のアカウントが必要だったので、これを参考に私はSinatra版を作りました。

結果的には期待通りの挙動で満足です。800MB近くの動画も問題なくアップロードできました。これを元にRails版も作っていく予定です。