読者です 読者をやめる 読者になる 読者になる

Yokohama.rb Monthly Meetup #74 に参加した

日記 Ruby

2016-11-12(土)の Yokohama.rb Monthly Meetup #74 に参加しました。

yokohamarb.doorkeeper.jp

  • 前半は Ruby レシピブック読書会
  • 後半は LT

という 7 月以来の流れでした。

レシピブック

今回はいつもより 30 分短かったこともあって、レシピ 238, 239 だけ読みました。

レシピ 238

のふたつを使って、プログラムの処理途中に実行ユーザの権限やグループ権限を切り替えたりする方法についてのレシピです。Docker や Foreman のグループを処理途中で使いたいときなどに便利ではという話でした。

スーパーユーザから一般ユーザへとプロセス実行権限を一時的に切り替えるために、実効 UID というものを Process#euid= を使って書き換えています。一方で、実 UIDというまた別の ID もあるようで、それらの違いがよくわからなかったので、質問してみました。その場で調査した結果(Wikipedia のユーザ識別子)、次の違いがあるとわかりました。

  • 実効 UID, 実効 GID(グループ ID)
    • ファイルの作成やアクセスに影響する ID
    • たとえばあるファイルを開く権限があるかチェックするときに使う
  • 実 UID, 実 GID
    • シグナル送信に影響する ID
    • たとえば kill でプロセス終了できる権限があるかチェックするときに使う

もはや Ruby とはあまり関係ないですが、勉強になりました。

レシピ 239

Windows レジストリにアクセスするためのライブラリ win32/registry についてのレシピです。メモ帳 (notepad.exe) 終了時のウィンドウ位置取得を例にした、レジストリの操作方法についてでした。

Windows ユーザが会場にいないので、完全に読むだけになるかと思いきや、@igrep さんがあらかじめ準備してあった自宅の Windows 環境にリモート接続しレシピを実演してくれました。ありがとうございます!

LT

LT 一本目は、@hamakn さんからリクエストがあったこともあり、僕が先月受けていたGMO ペパボの第二新卒向け研修についてかんたんにご紹介しました。

LT 二本目は、@hamakn さんから Rails の accepts_nested_attributes_forlimit オプションでハマった話や、DB 設計の悩みについてなどでした。DB 周りの知識大事という話に収束していきました。

懇親会

いつも使っている吉田飯店というお店の名前が「吉田飯店」に変わってました…

いかにエンジニアとして満足できる仕事をして成仏するか、みたいな人生観的な話と昨今のゲームの話が展開されていました。


次回 2016-12-10(土)の Yokohama.rb は以下リンクから申し込めます。読書会に参加するもよし、もくもくするもよし、他の方と技術トークするもよしで初心者から上級者までフィットするコミュニティだと思いますのでぜひぜひ。

yokohamarb.doorkeeper.jp

Fukuoka.rb #66 に参加した

Ruby 日記

現在、会社の研修で福岡に来ています。福岡には、地域 Ruby コミュニティとして Ruby コミッタの nagachika さんや弊社の udzura さんが主催されている Fukuoka.rb があります。今回、udzura さんに誘っていただき、10/12(水)に福岡・天神のグルーブノーツ社で開催された Fukuoka.rb #66 に参加してきました。

fukuokarb.connpass.com

弊社の研修メンバ 5 人が参加したので、会場がかつてない人口密度になりました。

LT として、morygonzalez さんから「Arel おじさんになって ActiveRecord のクエリを高速化しよう」というお話がありました。Arel は ActiveRecord のなかで様々な DB 用の SQL を生成するライブラリです。ActiveRecord で DB 操作を書いていると、Arel が無駄のあるクエリを生成することもあるらしく、Arel の性質をもとに、SELECT するカラムを絞るなどの方法で、できるだけ最適なクエリを生成するようにするのが大事ということでした。パフォーマンスに関わる部分は、できるだけ内部動作まで理解した対策が必要そうです。

その後、udzura さんの mruby gem ライブコーディングがありました。matsumotory さん作の mruby-mrbgem-template を使って gem のテンプレートを作成後、mruby や C で実装していくのを見ていました。mruby の C 拡張は Ruby の C 拡張よりとっつきやすいらしいので、試してみたいです。このあたりの記事が参考になりそう。

qiita.com

発表を聞いたあとはもくもくしていました。僕は最近利用者の方から意見をもらうことが増えた Ruby gem hatenablog の修正をしていました。徐々にやっていきます。

hatenablog gem 0.4.0 をリリースした

Ruby

Rubygem の hatenablog 0.4.0 をリリースしました。今回追加したのは Basic 認証ではてなブログの API を使えるようにする機能です。

github.com

PR ありがとうございます!

Basic 認証による利用方法

はてな API で Basic 認証による操作認可を得るには、API キーが必要です。API キーは

http://blog.hatena.ne.jp/<はてなユーザ ID>/<はてなブログ ID>/config/detail

から確認できます。次の画面の「API キー」の下に書いてあります。

f:id:kymmt90:20161009151759p:plain

Basic 認証を使うには、config.yml に次の項目を書いてください。

auth_type: basic
api_key: <API キー>
user_id: <はてなユーザ ID>
blog_id: <はてなブログ ID>

これで Basic 認証ではてなブログ API にアクセスできるようになります。

読書メーター→ブクログ移行用スクリプトを書いた

ツール Ruby

読書メーターからブクログへ宗旨替えすることにしたので、データを移行したい気持ちになりました。

幸い、ブクログには CSV データによる読書データのインポート機能が備わっていたことと、私が以前読書メーターのスクレイピング gem である bookmeter_scraper を作っていたことから、ブクログへの移行用にスクリプト booklognize を書きました。

github.com

このスクリプトで移行できるのは次のデータです。

  • 自分が登録した本
  • 読書ステータス
    • 読んだ
    • いま読んでる
    • 積読
    • 読みたい
  • 読了日(既読本のみ)

読書メーターで複数回読了日を記録している書籍(再読本)については、最後に読んだ日を読了日とします。

移行方法

次の流れで進めます。

  1. bookloganize でブクログへのインポート用 CSV を作成
  2. ブクログへインポート

bookloganize でブクログへのインポート用 CSV を作成

bookloganize で読書メーターからデータを取得し、ブクログへのインポート用 CSV を作成します。bookloganize はただの Ruby スクリプトなので、ダウンロードすれば使えます。thorbookmeter_scraper が必要なので、適宜インストールします。また、bookloganize は結果を標準出力に出力します。詳細は README を参照してください。

また、ブクログへインポートする CSV の文字コードは Shift_JIS とする必要があります。だいたい次のようなコマンドで所望の CSV が作成できると思います。

$ git clone https://github.com/kymmt90/bookloganize.git
$ gem install thor bookmeter_scraper
$ ruby bookloganize.rb csv <読書メーターのメールアドレス> <読書メーターのパスワード> | iconv -f utf-8 -t sjis >books.csv

CSV は次ページの「ブクログ形式」にしたがったものとなっています。

  • まとめて登録 (CSV)

      CSVファイルは、以下の項目順で1アイテムにつき1行として作成してください。
      サービスID, アイテムID, 13桁ISBN, カテゴリ, 評価, 読書状況, レビュー, タグ, 読書メモ(非公開), 登録日時, 読了日
    

ブクログへインポート

次のページから、CSV を使ってブクログへ読書データをインポートできます。

なお、読書メーターのオリジナル本機能による本を登録している場合、そのデータはブクログへ移行できません。

hatenablog-writer 0.1.1 と hatenablog 0.3.0

Ruby

今月は自分の gem にいくつか PR をいただいて新バージョンをリリースしました。PR をくださった方々、ありがとうございました。

hatenablog-writer 0.1.1

hatenablog-writer は CLI からはてなブログに投稿できるツールです。作ったきりほったらかしていたのですがブログ投稿に使ってもらっており、バグ修正の PR をいただきました。

github.com

hatenablog 0.3.0

上記の hatenablog-writer でも使っている、はてなブログ AtomPub API に Ruby からアクセスするための gem です。設定ファイルで ERB の記法が使えるようになる PR をいただきました。

github.com

この機能によって、例えば設定ファイルで次のように環境変数を使えます。アプリケーションにこの gem を組み込むときなどに使いやすくなるかと思います。

consumer_key: <%= ENV['CONSUMER_KEY'] %>
consumer_secret: <%= ENV['CONSUMER_SECRET'] %>
access_token: <%= ENV['ACCESS_TOKEN'] %>
access_token_secret: <%= ENV['ACCESS_TOKEN_SECRET'] %>
user_id: <%= ENV['USER_ID'] %>
blog_id: <%= ENV['BLOG_ID'] %>

所感

メンテや必要な機能に対する想像力が不足しがちなので、ちゃんとやっていきたい…