OAuth・OPICについてのまとめ

一番分かりやすい OAuth の説明 - Qiita

一番分かりやすい OpenID Connect の説明 - Qiita

www.slideshare.net

OAuthまとめ

OPIC(OpenID Connect)

  • OpenID Connect 入門
  • 認証 + 認可(OAuth2.0) + 属性取得プロトコル
    • 基本的には認証技術(Authentication)
      • id_tokenとaccess tokenを発行してもらう
    • さらに属性取得機能もある
      • 属性: ユーザー情報など
  • 登場人物
    • RO(Resource Owner)
      • OPからID token, access token発行許可を求められる
      • その際、本人確認情報の提示を求められる
    • Client
      • OPへID tokenとaccess tokenを要求する
    • OpenID Provider(&& Authorization Server)
      • ROへ発行許可を求める
      • ID token, access tokenを生成しClientへ発行する

SAML

  • Security Assertion Markup Languageの略称であり、OASISによって策定された異なるインターネットドメイン間でユーザー認証を行うための XML をベースにした標準規格
  • SAMLに対応したSSOの仕組みを、SaaSの形で提供しているのが「OneLogin」

実装例

爆速ッ!! gem omniauth-google-oauth2 で認証させる

github.com

github.com

SafariのリーディングリストをPocketへエクスポートする

情報収集の手段としてiPhoneからTwitterを使って行っています。
ちなみにfeatherというアプリを使っています。

feather for Twitter

アプリの機能の一つにSafariのリーディングリストへの追加がアプリ上から行えて便利なのですが、自宅のMacの方でもリーディングリストの記事を見ようとした時に、MacではChromeがメインブラウザなのでSafariをいちいち開くのが面倒なのでPocketに移行しようと思いました。

getpocket.com

そうした際に、今までSafariのリーディングリストにたまった400件ほどのリストをどうやってPocketに持っていこうか色々探した結果、こちらのツールを見つけました

github.com

2年くらいメンテされてなさそうでしたがなんとか使えましたw

使い方はリンク先にもあるように下記の手順で行います

  1. npm install -g reading-list-to-pocket
  2. 開発者用のページからPocketのアプリを作成してconsumre keyを取得する
    • アプリ名はなんでも良い
    • 下記のようにaddmodifyの権限設定が必要 f:id:litencatt:20180211150939p:plain
  3. reading-list-to-pocket --consumerKey <YOUR_APP_CONSUMER_KEY>を実行

実行するとこんな感じの表示がブラウザで表示され、f:id:litencatt:20180211150703p:plain

CLI上では下記のように表示されます

Now opening a browser to authenticate with Pocket...
Authorized successfully...
Syncing 464 items...
syncing done...

Pocketのマイリスト見に行くとリーディングリストにあったリンクが登録されていそうでした f:id:litencatt:20180211151244p:plain

Herokuへのdeploy方法を思い出す

1年ぶりくらいにHerokuにdeployしてみようとして色々詰まったので調べたことを残しておく。

ほぼ下記記事の内容で事足りました。
[Ruby] RailsをHerokuへデプロイする時の7つの注意事項 [Heroku] - Qiita

1年以上前にRailstutorialでHeroku使ったきりだったし、
開発ではMySQL使ってたのでrails_12factorとかひつようだったか?🤔と思いつつ、なんとかdeployまで完了。

下記のようなコマンドでmaster以外のbranchもdeployできるみたいだったがどうなんだろう…

$ git push heroku topic-branch-name:master --force

PC上で快適にEPUB形式データを読む

iOSバイスをお持ちの方はiBooksという素晴らしい電子書籍リーダーアプリが標準でインストールされており、スクロール表示でWebページを見るように縦or横スクロールさせて電子書籍を読むことができてとても快適です。

Mac版も同様にスクロール表示機能があるかと思いきや、まだ未対応の状況です。

 

長らくMac環境でEPUB形式のデータをスクロール表示させるためのアプリなどを探していたのですが、ようやく最近見つけたアプリをご紹介します。

 

1. Readium

現時点ではこれが表示の滑らかさなどで一番良さそうなアプリです。

Readium - Chrome ウェブストア

 

使い方は下記がわかりやすそうでした。

gihyo.jp

 

ちなみに技術評論社電子書籍EPUB形式もあるためよく購入しています。

 

2. BiB/i

Readiumに比べて若干読み込みやスクロールがもっさりしていますが、

ローカルにブラウザ上で動作するので英語の電子書籍など読む場合はすぐGoogle翻訳使えるので便利です。

また、GitHub上にコードが公開されていました。

bibi.epub.link

 

3. Murasaki

OS XEPUBリーダとしてMac App Storeに有料公開されているアプリ。今回試してはいません。

そして開発は2015年で止まっている感じでした。

Murasaki — The Scroll-based EPUB Reader for OS X

Murasaki ver. 2.3をリリースしました — Genji App Blog

2017年の振り返り

今年はサービスで2つの大きな機能リリースと、2つのイベントでの発表を行いました。

大きめのリリースを2回経験したことで、最近は若干設計について議論していけるくらいのスキルが身について来たなと感じつつも、まだまだ足りないスキルとのギャップも感じさせられた1年でした。

ただ、ChefやDocker、Terraformといった領域にも触れることができ、Webエンジニアとしての深さや幅を広げることができた1年だったと思います。

凄いエンジニアに囲まれて色々と気持ちが焦ることもありますが、来年も自分のペースで学習しつつ、特に基礎的な知識については継続的にしっかりと固めて行きたいと考えています。

DockerについてLTした内容と細かい話

speakerdeck.com

ホスティング事業部内のホスtechMTG#3にてDockerについてLTしました
資料に入り切らなかった小ネタなどをここでは紹介。

LT資料の言い回しついての補足

specコンテナ:
コンテナ内でRSpecを実行してコードをテストするためのコンテナ

dbコンテナ:
RSpec実行コンテナと接続しているMySQLが起動されたコンテナ

参考資料

最近だとこの辺がDockerについて特集記事がありました
Software Design 2017年2月号
WEB+DB PRESS Vol.98

実際に使ったコマンド

資料では若干オプションなど省いてたので完全版

  • specコンテナ側の起動時
    • $ docker run -dit -v $(pwd)/spec/features:/tmp/muu/spec/features --link db spec bash
    • E2Eテストだけ外から変えられるように-vでホストPC側の一部をマウント
  • exit後にもっかい入る時
    • $docker run -it spec bash
    • -dでコンテナを起動している
    • exitした後、再度コンテナに入りたい時に

.dockerignore

コンテナ間通信についての資料とかは探せばたくさんあるけれども

最終的にはやっぱり公式っしょ
- Docker Engine ユーザガイド - コンテナ通信の理解

spec->dbコンテナのDB接続のため

Railsのconfig/database.ymlでは環境変数で与えられたhost名を使って接続するようにしているので、
specコンテナのDockerfile内でdbコンテナのipを環境変数(TEST_MYSQL_HOST)として与えておくことでちょっと楽した気分を味わいました。
docker-composeを使えばそういうことせずにspecコンテナ側のlocalhost:3306をdbコンテナ側の3306としてPort Forwardingの設定ができそうな気はしました。
あと、drone.ioの.drone.ymlはdocker-composeのsupersetのようなのでdocker-compose.ymlには使いまわせるのかな?というところまでで。 drone.io - Getting Startd

# Dockerfile
...
ENV TEST_MYSQL_HOST 172.17.0.2
# config/database.yml
common: &common
  adapter:   mysql2
  reconnect: false
  pool:      5
  strict:    false
  database: dbdbdb

...

test:
  <<: *common
  host: <%= ENV['TEST_MYSQL_HOST'] %>
  username: <%= ENV['TEST_MYSQL_USER'] %>
  password: <%= ENV['TEST_MYSQL_PASSWORD'] %>

ここ3ヶ月間のコードレビューでついたコメント集(PHP編)

なんとWeb業界に転職してはや5ヶ月目突入しました。
今回はサービスに配属されてからこの3ヶ月間のうちに自分が出したPRのコードへのコメントをまとめてみました。 タイトルの通り内容はPHPの書き方に絞っています。

  • nullの判定
    • $foo['bar'] === nullではなくempty($foo['bar']) または isset($foo['bar'])を使う
  • nullだったら代入させたいパターン
    • ついついif (empty($now)) {と書いちゃいがちだが、if使わなくても1 sentenseでいけるよってパターン
    • nullでない時は$nowの値がそのままとなる
>>> $now || $now = date('Ymd')
>>> $now
=> "20170202"
  • 文字列判定
    • strpos()よりpreg_match()
    • 正規表現を使うことになるが、より細かい判定基準で文字列一致を判定できる
  • 戻り値をbooleanで返す時
    • ついついif ($bar === '何か文字列') {とかで判定した結果をreturnしがちだけど 1 sentenseでいけるよってパタン2
    function foo() {
        return ($bar === '何か文字列');
    }
  • ヒアドキュメントを使う
  • __DIR__を使う
    • require __DIR__.'/../../Example.php'


一応前職でCをかじっていたいので基本中の基本では突っ込まれることはなく、
PHP特有の標準関数を使うことや、こういう書き方まで書いてOKみたいなラインについて理解が進んできました。
とはいってもまだまだなので日進月歩で学んでいきます。

ではまた何ヶ月か後にPHPRails編で。