mmyoji's diary

プログラミングとか日々のどうでもいいこととか

github.io, jekyll に移行してますが

さっきも Redux の記事 書いてて、なかなかファイルがビルドされずにうろたえてましたが、ようやく投稿できました...

はてなブログの方が楽っちゃ楽ですが、ランキングとかはてブとか、気になっちゃうので嫌なんですよね...

あと未だに :emoji: 対応されないのも結構イタいので、総合して github.io の勝ちってことで。

jekyll は使い始めた瞬間から ver 1.0 が公開されたりして色々とめんどくさかったですが、普通に文章書く分には無問題だと思ってます :raising_hand:

一番嬉しいのは

って感じで esa に一本化されること。

jekyll はコードのハイライトつける時に {% highlight ruby %} とかで囲む必要があって、それ用にいちいち書き換えるのがめんどくさい。(Redcarpet使えばまぁ避けられるっちゃ避けられるが)

場合にもよりますが、長い文章とか書くときは個人 esablog_draft/ ってディレクトリ切ってるのでそこに書いて、WIPで育てて、コピペしてはてな, github.io, Qiita:Team に投稿したりしてます。

Qiita:Teamはほぼそのまま貼れるのでまぁいいとして。

しばらくは github.io でがんばりますmm

したっけ! ?

まずプルリクから

最近「文句を言うくらいならPullRequest出せ」というスタンスで仕事をするようにしたらだいぶ気持ちが楽になった。

結局文句を言うってのは今のコードベースに太刀打ちできない実力のなさを吐露することにすぎないので、「めっちゃ恥ずかしいことしてたな自分」と思ってやめた笑 今更すぎますが...

今はどの仕事も比較的リファクタ要員的なところがあるので、自由に色々できるからせこせこPullRequest作れるってのもあるかもしれませんが、時間無かったり心に余裕がなくてもこういうスタイルでコードを書きたい。

みんながみんな今あるコードベースに対抗できる実力があるとは限らないので、これを他人に強要するつもりはないですが(どっかでガス抜き的な意味で愚痴を言うのは必要)、人の上に立つ人間がこういうことするのは良くないですよという話をとある会社のCTOにはしました。

過去の負債を放置してきた会社側に責任があるのに、上に立つ人間が「これは過去にxxxさんって人がやったコードで...」とか言ってそこにいない人を非難することであたかも自分に責任がないかのようなスタイルもよくないですが、何より今いるメンバーに逃げ道を与えることになってしまう。

「あぁ、このわかりづらい/直しづらいコードは過去の誰かがやったやつだから、そいつのせいにして俺が直す必要はないわ」的な発想を部下にもたせてしまい、結局負債が放置されている、という状況ができてしまっているので、実際良くないんだろうなぁと思ってます。

「少しでもこういう考え方を払拭してほしい」 + 「 過去の自分に対する戒め」という意味で、最近は「まずPR」というスタンスでいくようにしてます。

業務委託という立場でも、多少は社内に良い影響与えることに貢献できればいいなぁというつもりで...

恥ずかしかったので公開するか迷いましたが、ちょっと良い感じなこと言えたので()一応残します。ポエムでした。

Vimをしばらく使ってみて

大体2~3週間ほど使った気がする。仕事ではEmacs使って、プライベートでコード書くときだけVimを使用。

背景など

  • Emacs使用歴2年(そんなにカスタマイズしてない)
  • vimtutor を過去2回ほどやって挫折
  • EmacsではRuby, JS, HTML(Emmet), Elixir, Markdown 等を書いてる
  • VimではRuby, Elixir, Cを主に書いた
  • Ruby, Elixirのsyntax highlightと NERDTree ぐらいしか入れてない

所感

  • カスタマイズが楽
    • Emacs(Elisp) に比べると日本語のソースが多い(これが強い)
    • Elispほど意味不明な感じがしない(個人の感想です)
  • デフォルトのコマンドでできることが多い
    • 今まで周囲のvimmerから「編集するならvimが圧倒的につよい!」と煽られてきましたが「たしかに...」という感想
  • モードの行き来が言うほど手間じゃない
    • Escしかダメかと思ってましたが Ctrl + c でnormalモードに戻れるので全然しんどくない
  • コピペが慣れない
    • Copy: Emacs - Ctrl + w, Vim - y
    • Paste: Emacs - Ctrl + y, Vim - p
    • ごっちゃになって毎回2秒ほど止まる。これも慣れ
  • smart-paren 使ってたので最後に "} を打ち忘れる
    • これも慣れ
    • Vimでも似たようなplugin入れたけど " 入力して、中身入力したあとに一回normalに戻って A 押してinsertに入って...ってやるのが疲れるのでやめた。

vi, vim 恐怖症がかなり改善された気がします。

たまに今どっちのエディタ使ってるかわからなくなってj押しまくってたら「あぁ...」ってなる。

Vim vs Emacs

好きなの使えばいいと心底思った。両方使える環境なら気分で使い分けます。

両方そこまでカスタマイズしているわけではないのでコアな方からはお叱りを受けそうですが...

ネストできるコメント機能作るとき

がんばってRailsをnormalizeしましょう。はい。

以下のような仕様があるとする

  • 商品 ( Product ) にコメントできるようにしたい
  • ただし「コメントにコメントする」ような機能にしたい( Hacker News みたいな感じ)

この時、自前で実装してもいいんですが acts_as_commentable_with_threading を使うと比較的楽に実装できます。

awesome_nested_set に依存していて、 こちら の記事がとてもわかりやすかったので事前に目を通しておくといいと思います。

実装

とりあえずコメントをする User モデルがあるとします

$ rails g model user username:string email:string

商品 (Product) モデル

$ rails g model product name:string price:integer

gem 用の comment モデル作成

$ rails g acts_as_commentable_with_threading_migration

# すでに acts_as_commentable を使っていれば代わりに以下を実行 #トノコト
$ rails g acts_as_commentable_upgrade_migration

これで rake db:migrate してください

であとは以下を書くだけ

class Product < ActiveRecord::Model
  acts_as_commentable
end

コメントの作成

user = User.first
product = Product.first

comment = Comment.build_from(
  product, 
  user.id, 
  "I am a root comment."
)
# 自分で以下のように書くのと同じです
# Comment.new(
#   commentable: product,
#   user_id: user.id,
#   body: "I am a root comment."
# )
comment.save!

# commentに紐づく子commentの作成
comment.children.create!(
  user: user,
  commentable: product,
  body: "I am a child comment.",
)

# or set `parent_id`
child_comment = Comment.build_from(
  product,
  user.id,
  "I am another child comment.",
)
child_comment.update!(parent_id: comment.id)

form 組むのがなんかめんどくさそうですが、自分がなるべく楽できるようにがんばって仕様を捻じ曲げましょう。

mix phoenix.gen.model/html の書き方

References

qiita.com

メモ

# 型を指定しなければ、stringになる
$ mix phoenix.gen.model User users username email age:integer  

# unique 制約や references など
$ mix phoenix.gen.model Post posts user_id:references:users \
> title:unique body:text published_at:datetime

null: false とかはmigrationファイル開いて自分で書かないといけない(と思っている)

他新しい発見あれば追記します