2015年12月5日土曜日

プログラミング初心者がGoに入門しようとしてサンプルアプリのテキストwikiを動かすまで

この記事は Go その2 Advent Calendar 2015 の5日目の記事です。


日付変更と共に公開できず、しかも内容も他の方の記事に比べてショボくて申し訳ありませんが、タイトルの通りサンプルとしてWeb上に公開されているテキストwikiが動くまでにやったことの記録です。

動機

同僚のリードプログラマがGo言語を使ってシステムに機能追加を行いました。
私はサーバ構築をサポートしましたが、ミドルウェアやフレームワークなど、まだまだ彼にGo言語プロダクトの責任が偏っています。そしてそもそもGoのソースコードは1ミリもわかりません…。
今後はチームとしてスマートに動けるように、責任を平準化し、ソースコードや開発手法について議論を深めたいので、私もGoを学んでみようと思いました。

成果物

結論としてはたった2ファイル
https://github.com/TearTheSky/golangStudy/blob/master/textwiki/textwiki.go
https://github.com/TearTheSky/dotfiles/blob/master/.vimrc

textwiki.go というgoプログラムができました。
これをWebサーバに持って行って起動し、Webサーバへのアクセスを127.0.0.1:9000に渡すように設定変更してあげればテキストwikiが利用できました。
Webサーバにはnginxを使っています。
ローカルでもできるやろそれ、と言われそう(実際言われました)が、netライブラリあたりが原因なのか、うまく使えなかったので、ローカルで動く版も作りたいと思います…。



やったこと

Goのインストール

最近はMacを使っています。Macの場合はhomebrewですぐにGoをインストールして環境構築を始めることができます。
brew install go で、Go1.4がインストールされ、brew update と brew upgrade を行うと1.5にバージョンアップしました。
安易にbrew upgrade していいのかちょっと怪しいですが、せっかく最新になったので使っていこうと思います。

NeoBundleとカラースキーマとvim-goのインストール

Vim pluginへの入門[NeoBundle.vim] を参考にさせていただいて、NeoBundleをインストールしました。NeoBundleはVimのプラグイン管理を楽にしてくれるプラグインです。
外部からプラグインをダウンロードしてくる方法が分かったので、既存のしょぼい .vimrc に追記して、vim-goをインストールします。
ついでにカラースキーマも変更します。背景色は黒板みたいな深緑がいいんだけど、探したり作るのがめんどくさいので、とりあえずSublimeText使ってるし馴染みのある molokai を入れます。黒板風カラースキーマの作成、あとでやろう。あとで…。


ブラウザ上からHelloWorld!する


AWSnginx+golangが動く環境を作る 」を参考にさせていただいて、Nginxサーバを立てて、そこへのアクセスをGo言語がListenする9000番ポートにパスするようにしました。
そしてHelloWorldを出力するプログラムを起動しておけば、ブラウザ上からサーバへアクセスしたときにHelloWorldが出力されます。

チュートリアルに沿って書く

古すぎて参考にしてはいけないサイトとして有名らしい(知らなかった) golang.jp にある「 Codelab: Webアプリケーションを書いてみよう 」を読みながらソースコードを増やしていきます。
コピペですコピペ。
でも、ただのコピペじゃ動きません。
古すぎるのでライブラリ名が変わったりしていてエラーになります。
エラー名をググりながら修正していきます。
WebGolangで作ろうとハマった」 などは非常に助かりました。ありがとうございました。
それから、/view/用のhtmlテンプレートがないので作ります。/edit/をコピーしてちょっといじればすぐです。

これからやらなきゃいけないこと・やりたいこと

やらなきゃいけないことは無限に湧いて出ると思いますが、とりあえず次のステップに進むために必要そうなことを何個か…



明日は tienlen さんの記事です。パッケージ管理についてということなので、読んで勉強します!




1 件のコメント:

  1. リクエストからファイル名を得る部分 getTitle はもう少しサニタイズしないと意図しないパスにファイルが書かれそうな気がします。例えばこれは Windows に限った話ですが

    http://localhost:8080/C:%5cWindows%5cnotepad.exe

    にリクエストすると予期しないファイルに書こうとします。もちろん権限が無い場合にはエラーになりますが。また UNIX 系 OS だとしても期待しないファイル名になるかと思います。
    期待しない文字は strings.Replacer 等で置換してしまうのが良いかと思います。

    返信削除