プロキシ環境下でどうしても Qiita が見たかった話


背景

私が働く会社では、プロキシに阻まれて Qiita にアクセスすることができません。

勉強会なんかで話を聞いていると、意外と同じような環境の会社があることを聞きます。
でも、どうしても 「 会社でQiitaが見たい!! 」

こんな悩みをある日、AWS の勉強会に参加されていた方に相談をしたら、いいアイデアを頂きました。
最近、AWS の勉強もしていたので実装してみました。

全体像

作成したサービスの簡単な流れとしては、見たい Qiita のページ情報を抜いてきて、社内からでもアクセスできるところに配置し直す感じです。
ちなみに、社内から AWS にアクセスできない場合は、アウトです。

使用したサービス

今回、AWS で使うサービスは主に 3 つです。各サービスの詳細な説明は割愛します。

構成

  1. 見たい Qiita のページの URL をクエリパラメータとして受け付ける API に GET でリクエスト
  2. クエリパラメータ(Qiita の URL)を Lambda に渡す
  3. Lambda から Qiita のページにアクセスし、Markdown を取得
  4. Markdown → HTML に変換し、S3 に静的コンテンツとして保存
  5. S3 オブジェクトの保存先 URL をリダイレクト先としてレスポンス
  6. S3 にリダイレクト

リクエストは、https://qiita.com/guromityan/items/5846fcefd87abcf76f7f の記事を見る場合は以下のようになります。
target で、見たい記事の URL を指定します。

https://<API Gateway>.ap-northeast-1.amazonaws.com/previewQiita?target=https://qiita.com/guromityan/items/5846fcefd87abcf76f7f

レスポンスは以下のようになります。

{
  "statusCode": 301,
  "headers": {
    "Location": "https://<S3 Bucket>.s3-ap-northeast-1.amazonaws.com/guromityan/5846fcefd87abcf76f7f"
  }
}

"sutatusCode": 301 のため、これを受け取ったブラウザは Location ヘッダに指定された URL にリダイレクトします。遷移先は、Markdown から html に変換した S3 オブジェクトを静的コンテンツとして公開しているページです。

ちなみに私は、Chrome の拡張機能を作って Qiita への URL を自動的に API Gataway を叩くように書き換えています。その話もいつか書こうと思います。

やり方

今回話したかったのは、こんなアイデアもあるんだということなので AWS のサービスの設定方法の説明は割愛します。

Lambda のソースコードは [GitHub] guromityan/previewQiita で公開しておくので、やりたい方は使ってみてください。

[注意]
Lambda で使うには依存ライブラリもまとめて zip で固める必要があるため、docker-compose build などしてローカルに依存ライブラリを落としてきてください。