2017年9月6日水曜日

Golang で Webサービスにドキュメントをプッシュするツールを作りました

  • 複数のWebサービスにドキュメントを公開するツールです。
  • tdのようなログ送信ではなく、ドキュメントファイルを想定しています。
  • Golang 製なので、バイナリ一つで動きます。
  • シンプルなライブラリ設計で、Publisherインターフェイスを実装すればOKです。
  • context対応しているので、安全にAPIをクローズできます。

  • https://github.com/ynishi/publish
  • https://godoc.org/github.com/ynishi/publish

対応

  • github => commit を追加します。Endpointを最初からオプションで渡せるので、GHEもOKです。
  • s3 => ファイルをアップロードします。

Golang のTips

デバッグ

  • ライブラリでも最初から実行可能にしておく(mainを設置)
  • TDDとはいえ、dlvがきかないからきつい。
  • 処理を飛ばすと、debugしにくくなる。

構成

  • cobra/viper を最初から固めておく。
  • cobra使うなら、viperとセットで。
  • 最初から使うなら、cobraのscaffoldingを使う

TDD

  • err処理や、testの共通処理を関数で飛ばすのは、いまいち。
  • context.cancelに関しては、cancelして動作を確認しておく。

よきGolang lifeを!

2017年8月26日土曜日

Golang で nagios plugin をつくりました

REST api 特化した nagios plugin を Golang で書きました。SAASやサーバレスなどのサービスが本格的に使われるようになってきたので、REST apiに特化したGlobal監視を前提にしたプラグインを作りました。

インストール

go get github.com/ynishi/nagios-check-rest
cd $GOPATH/src/github.com/ynishi/nagios-check-rest
make
# move check_rest file to nagios plugin dir

よきnagios lifeを!

2017年8月12日土曜日

go開発環境構築 on Windows

  • WindowsでGolangのIDE開発環境を構築します。

goのインストール

  • https://golang.org/doc/install#windows
  • PATHの追加
    • %PATH%;%USERPROFILE%\go\bin
    • C:\go\bin は設定されるが、ユーザごとの%USERPROFILE%\go\bin は追加されない。
  • GOPATHの追加
    • %USERPROFILE%\go

gitのインストール

go tools のインストール

Goglandのインストール

  • https://www.jetbrains.com/go/
  • goimportsの設定
    • setting => keymap => goimportsを検索 => Ctrl + Shift + S などに設定
  • Terminalの設定
    • setting => Terminal => Shell path => C:\Program Files\Git\bin\bash.exe に設定
    • Unix likeな操作がターミナルパネルで使える
    • C:\Program Files\Git\git-bash.exe だと別ウィンドウになる

プロジェクトの配置

  • Goの標準に従う
  • もしくは、github.com/user 直下をまるごと一つのGoglandプロジェクトとして読み込む。
    • 一括で取り込み管理できる。
    • 各リポジトリのGo SDKなどの設定ができない。

WindowsでもよきGo lifeを!

2017年8月5日土曜日

Golangの Redash APIクライアントライブラリを作りました

Redash の Rest api をラップするGolang ライブラリを書きました。

GolangからRedashクライアントを使いたいときは使ってみてください。

今後機能追加するとしたら、cli化だと思います。セッション管理機能を持ったcliを作って一般的なDB clientのようにredashを使えればかなり便利だと思います。

https://github.com/ynishi/redash

  • インストール

    go get github.com/ynishi/redash
  • 実装機能
    • Client(Get/Post/Deleteを実行)
    • Queries系API

Redash

今年に入って仕事でOSSのBIツール、Redashを使う機会がありました。

Redashの特徴は、豊富なDB連携と、ほとんど全ての機能がAPI経由でできることです。 (Redashの構成自体そうなっている)

API利用は、オフィシャルに推奨されています。 特にドキュメントはなく、サポートに問い合わせたところ、ソースコードを見て是非使ってくださいとのことでした。

仕事の案件ではサーバにDBクライアントの追加が厳しい環境 だったので、Redashを経由してデータを取得しました。

DB連携が限定的でよければ、Airbnbが作ったツールがあります。画面の作りこみと、権限管理などがRedashよりよさそうです。 superset

Golang

Golangのライブラリはなかったので、作ることにしました。

仕事でもGolangの導入を画策しているので、テスト、ドキュメンテーション、ライブラリ管理なども含めて一通り用意しました。

APIクライアントについて

  • GolangでAPIクライアントを実装
  • http://deeeet.com/writing/2016/11/01/go-api-client/

開発にあたって

とにかく参考になるのが、本家日本語版ドキュメントです。

実際にコードを書く際には必須のEffective Goですが、本家は英語版のみです。

日本語訳は、有志の方によるものがいくつかあります。少し古いですが日本語で読めるのはありがたいです。

このページにまとまってますGo言語の初心者が見ると幸せになれる場所 #golang

プロジェクトの開始

  • 上記のGoの書き方 が参考になります。
    • ディレクトリ構成は github.comなどと密接に結びついた構成になってます。
    • GOPATHdirenv使GOPATHは固定にして、その中にリポジトリを置く方がよさそう。
    • $GOPATH内にリポジトリ本体を置いて、他の場所には、シンボリックリンクを張る構成に落ち着きました。
  • 自動テスト
    • 開発環境の自動コンパイル・テストは標準ツールはありません。godoなどを使います。
    • Goglandなら、コンパイルエラーは随時検知できます。
    • travis, werker, CircleCI, droneなど各種CIサービスで公式サポートされてます。簡単に設定できるので、最初にしておく方がいいです。
  • リポジトリタグ
    • githubのリポジトリタグ => 公式に合わせて go に。

ツール

  • vim-go
  • [Gogland(IDE)](https://www.jetbrains.com/go/)
    • 最初は便利
    • debuggerが使えないなど一部難あり
    • $GOPATH内に置いたリポジトリを取り込む(または、$GOPATH/../自分のアカウントディレクトリ/をとりこむ)

ドキュメンテーション

  • godocに合わせて作成。
    • 基本パッケージ、公開するものにコメントを書けばOkです。
    • ライセンス表記は、ファイルの一番上に書いて空行を入れてからパッケージコメントを書くとgodocに表示されません。
    • Exampleテストを書けばそれが表示されます。
  • GoDoc hostの登録方法
    • インポートするパッケージ名を一度検索します。

      //↓これで検索
      github.com/ynihsi/redash
    • 次からはキーワード検索でマッチします。

      //↓これでひっかかる
      redash

ライブラリ管理

  • 公式ツール dep があります。
    • まだ開発中で標準ツールに取り込まれてはいません。
    • (2017/7現在)設定ファイルは固まったようでプロダクションuse OKになりましたが、まだAPIは変わる可能性があります。
  • glideなど各種ツールがあります。
  • パッケージ名でバージョン管理する方法があります(これまで公式依存管理ツールがなかったため)
  • Golangの設計として安定する傾向が強いです(mapのキャストが手間で結局構造体とインターフェイスを使うなど)

よきGolang & Redash ライフを!

2017年7月23日日曜日

cliでGo Playground 的なこと

  • Go Playgroundは、ちょっとしたコードを試すのによい。
  • ただ、3rd Partyのライブラリが読み込めない。
  • 今あるGoの開発環境を使いたい(ライブラリ,Cli)
  • Go のreplもいくつかあるので、そちらが合う人はどうぞ。

と考えて、godoというgulp likeなタスクランナーを使ってcli上で、コードを試せるものを簡易的に作りました。

https://github.com/ynishi/simple-go-playground

単純に、goのスニペットファイルを作って、変更があったら自動でrunするだけのシンプルなものです。

vimで使う

vimで開発してる人は、vim内の別ウィンドウで、プロセス起動できるプラグインがあります。

https://github.com/vim-scripts/Conque-Shell

これを使うと、vim内でスニペットファイルを変更して実行結果が随時確認できるので、Playgroundにより近くなると思います。

よきGo lifeを!

2017年7月1日土曜日

JSプロジェクトのテンプレートを公開しました

  • フロントエンドを改めて調べた。
  • 各種ツールを組み合わせる必要があり、公開されてるテンプレートが非常に役に立った。
  • やりたいことが一通りできたので、テンプレートを公開します。
  • リポジトリ https://github.com/ynishi/riot-firebase-es6

概要

やりたかったこと

  • ES6でできるだけ記述
  • テスト可能にする
  • npmパッケージを使用する
  • 学習コストの低い軽量ライブラリ/サービスを使う

使用フレームワークと対応仕様

  • Riot(tag & route) => ES6
  • Firebase => ES6
  • Karma => ES6
  • Rollupで上記ES6 => ES5 => test & build & deploy => ブラウザで閲覧
  • npm => npm-scriptで簡易ビルドコマンド

参考になった記事

  • npm とか bower とか一体何なんだよ!Javascript 界隈の文脈を理解しよう http://qiita.com/megane42/items/2ab6ffd866c3f2fda066
  • Riot+Firebase APIをたたくhttp://qiita.com/tomomichi/items/43da4d35007e69d0f484
  • Riot+Webpack https://github.com/esnunes/riotjs-loader
  • Riot+Rollup http://qiita.com/cognitom/items/c20c22614560627062cb
  • Riot+Rollup Example http://qiita.com/cognitom/items/c20c22614560627062cb
  • Firebaseにデプロイする http://qiita.com/kohashi/items/43ea22f61ade45972881
  • SAMモデル(SPA/Reactをモデル化) https://www.infoq.com/jp/articles/no-more-mvc-frameworks

よきES6ライフを!

2017年5月3日水曜日

プログラミング入門講座 で最新のプログラミング学習方法を読んでみる

  • 「プログラミングの基本を最少の時間で確実に習得できる学び方とは?」とのことで、最近の学習方法について気になったので読んでみました。

対象読者

◆◆本書の対象読者◆◆
・ できるだけ効率よく、プログラミングの基本を習得したい人
・ プログラミングに興味はあるが、そもそもの「学び方」がよくわからない人
・ 社会人の一般教養として「プログラミングの基本」を身につけておきたい人
・ 子どものプログラミング教育に興味のある人

とのことで、内容からもブルーバックスや理系の新書も読まないレベルの方々が対象と感じました。

プログラミングをやりたい=>「Java入門/計算機科学入門/コンピューターのしくみ/アルゴリズム入門をやらないと」という方々にはあまり有益と感じられる情報はないかもしれません。

気になった個所

その前提ではありますが、目に留まった個所を紹介します。

  1. オンライン講座の紹介が豊富
    • この本では、オンライン講座から入門することを推奨していて、様々なサービスが紹介されています。
    • 動作環境ありのオンライン講座は経験者でもさくっと試してみるにはいいです。
    • 経験者でも、新しい分野をCourseraなどから入門する方法はありですね。
  2. 簡単なことから難しいことへ
    • オンライン講座でとりあえず動かしてみて、基本的な用語も身についたところで、質問をしてみる。
    • 本でスムーズに独学できるレベルになってから独学する。
  3. 企画と開発を分けて考える
    • プライベート・入門者だからこそ、企画と開発を分けて考えることが重要。
    • プライベートでプログラミングをしようとして挫折するパターンとして、「とりあえず○○入門を買ってくる」=> 「写経する」=> 「終わったけどどうしよう?」となる。
    • これではプログラミングの醍醐味である、自分の好きなアプリを作って、それが実際に動くというところが体験できないし、続かない。

プログラミング「言語」の入門を期待すると全く違う内容ですが、プライベートでプログラミングを体験してみることの概要がつかめるので、「プライベートでプログラミングやってみたいんだけど」と相談された時に、上記の条件にあっている人に教えてあげると役立つと思います。

よいプログラミング入門を!