Posted at
WACULDay 7

簡易リバースプロキシ「ichigo」でWebアプリ開発が捗る話

More than 3 years have passed since last update.


概要

自社サービスの開発中、必要にかられてGOで簡単なリバースプロキシツールを作った話を書いてみます。


前提

自社サービスの開発を、次のような構成で進めています。


  • フロントエンドとバックエンド(APIなど)をパスで振り分け



    • /の下はフロントエンド


    • /api/の下はAPI

    • その他にも色々・・・



  • フロントエンドとバックエンドは、担当者もリポジトリも、動いているサーバも別

  • それぞれサーバが開発環境、本番環境とテスト環境、のように複数の環境をもっている


やりたいこと

前提の環境をもって、いざ開発をしようとローカル環境を構築するとなれば、


  • ローカルにnginxでリバースプロキシを立てて管理するのは面倒くさい

  • ちょっとした環境の変更があると共有がいちいち面倒くさい

  • フロントエンド担当者がわざわざバックエンドをcloneだのpullだの面倒くさい

  • 環境間でテストするためにわざわざnginxの設定書き換えるのも面倒くさい

と、面倒くさいことばかりになりがちです。

そこで、簡単なプロキシツールを作って、


  • ローカルには自分の担当するサーバ(とプロキシツール)だけが動いていればいい

  • 接続先の環境を容易に切り替えられる

ようになったら便利だなァ、というのが動機です。


作ってみた

これを手軽に実現できるよう、簡単なリバースプロキシツールを作ってみました。

Ichigo (GitHub)

ichigo

いちごです。美味しいですよね、いちご。


使い方

詳しい使い方は、GitHubのREADMEを御覧ください。

ここではかんたんな機能紹介まで。


  • Ichigo経由でアクセスすると、画面左下にコントローラーが現れます。
    ichigo

  • 各サーバーのプロキシ先を、コントローラで切り替えられます。
    ichigo


愚痴 開発中のあれこれ


  • この程度のツールを作るなら、Goってホント良い感じ。


    • Goっていい感じ。



  • 世の中にありそうなもんだけどなァ、と思ったらなかなかなかった。


    • もっと賢いやり方あったら教えてほしい



  • TypeScriptで頑張ってみたけど、やっぱりフロントエンド苦手。


    • でもやっぱりTypeScript最高。型付き言語最高。愛してる。(異論は認めます)



  • Goっていい感じ。


  • gorilla/muxとか、mux系は色々なライブラリがあるのに、もそっと柔らかいライブラリはないものなのか・・・。



    • /*はこっち、/api/*はあっち、とかやろうとすると、全部/*に吸い取られる罠


    • net/http/httputil.ReverseProxy最高!



  • Goっていい感じ。


    • Goっていい感じ。

    • Gopher君ぺろぺろしたい




Thanks

ちょっとした面倒を避けて、みんなの苺が美味しくなりますように