GolangでSlackの特定のチャンネルにメッセージを送る
Cronで定期的に動かしているGo言語で書かれたプログラムからSlackの特定のチャンネルにメッセージを送りたいと思って調べてみました。
どうやらWebhook URLを使えば簡単にSlackのチャンネルにメッセージを送ることができるようです。 というわけでまずはSlackのWebhookのURLを取得します。
Webhook URLを取得する
ブラウザで以下のアドレスにアクセスします。
https://slack.com/services/new/incoming-webhook
Post to Channelの箇所でメッセージを送りたいチャンネルを選択します。 ここで選んだチャンネルはメッセージを送信するときのデフォルトのChannelとなるだけで、送信する際に別のChannelを指定することもできるます。
選択したらAdd Incoming WebHooks integrationボタンをクリックします。
次の画面にWebhook URLが表示されるのでこのアドレスをメモしておきましょう。
とりあえずCurlでメッセージを送ってみる
メモしたURLにPOSTメソッドでJSONを送ることでメッセージを送信することができます。text
キーが送るメッセージになります。
curl -d '{"text":"Hello Slack"}' https://hooks.slack.com/services/ほげほげ
こんな感じにメッセージが送られてきます。
送るチャンネルやユーザー名を指定することもできます。それぞれusername
キーとchannel
キーになります。
curl -d '{"text":"Hello Slack", "username":"hoge", "channel":"random"}' https://hooks.slack.com/services/ほげほげ
GoでSlackにメッセージを送る
GoでHTTPリクエストを送信する際にはnet/http
パッケージを使います。
package main import ( "bytes" "fmt" "net/http" ) func main() { name := "Go" text := "Hello from go" channel := "random" jsonStr := `{"channel":"` + channel + `","username":"` + name + `","text":"` + text + `"}` req, err := http.NewRequest( "POST", "https://hooks.slack.com/services/ほげほげ", bytes.NewBuffer([]byte(jsonStr)), ) if err != nil { fmt.Print(err) } req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Print(err) } fmt.Print(resp) defer resp.Body.Close() }
2018年に2012年モデルのMac miniを使う2つの理由
Mac Mini 2018モデルはこちら
iMacやMacBook Proなど新しいモデルが発売されていく中、2014年にLate 2014
が発売されてからここ数年音沙汰がないMac mini。iMacはiMac Proというプロスペックな上位モデルが発売され、MacBook/MacBook Proに至ってはすでにあのキーボードが3世代目となりました。
手頃な価格で購入することができ、省スペースな筐体、好きなディスプレイを使うことができるMac miniが好きでG4時代から新しいモデルが出る度に買い替えて使ってきました。・・・が!Late 2014
には手を出さず、未だにLate 2012
を使い続けています。
2018年にもなって2012年に発売されたLate 2012を使い続けている2つの理由
後者は最新モデルでもCTOでSSDを積んだり、メモリを16GBに増設できるので札束さえ用意できれば問題になりませんが、CTOでもデュアルコアなのがLate 2014
のダメなところ。
もちろん新しいLate 2014
はチップセットが新しくなっており、内蔵のGPUもiMacなどと比べ非力とは言え新しくなっているのでブラウザを使ったりエディタを使ったりするくらいであればLate 2012
より快適なはずです。
ただ一番の問題が繰り返しになりますが、Late 2014
はCTOでも3.0GHzデュアルコアIntel Core i7
ということ。Late 2012
はCTOで2.6GHzクアッドコアIntel Core i7
です。シングルコアで行う処理は間違いなくLate 2014
に分がありますが、マルチプロセッサに対応しているアプリのビルド、画像処理、ノンリニア映像編集などではLate 2012
の4コアが力を発揮します。
※あくまでMac mini同士での比較。もっとCPUパワーがあり、GPUも積んでるiMac、MacBookPro、Mac Proの方が速いのは間違いない。
Late 2012 でストレージ、メモリを自分で交換する
HDD/SSDは2.5インチを選ぶ必要があります。SSDも安くなってきたので500GBでも15,000円ほどで購入できるので良い時代になったものです。
メモリだけであれば特殊な工具は必要ありませんがハードディスク(SSD)を交換する場合はトルクスドライバーが必要になります。
まずは本体を裏返して裏蓋を開けます。
メモリの交換だけであればこの状態で交換することが可能です。 ハードディスクからSSDに交換するのでここから分解して行きます。分解と言ってもネジを数カ所外すだけなので簡単です。
まずは3カ所のネジを外してファンを取り外します。
ファンの電源コードがロジックボードに接続されているので丁寧に外すか、そのままにしておいて引っ張ってしまわないように気をつけます。
ファンを外したら左側のプラスチックの部品も取り外します。ネジは一カ所だけです。取り外す時にプラスチックの部品を破損させてしまわないように気をつけます。ネジの付近が薄いので無理にこじるのは止めましょう。
ハードディスクに辿り着くまで後一息です。最後にWiFiのアンテナを取り外します。
これでハードディスクを取り外すことができます。ロジックボードからコネクタを丁寧に外して、ハードディスクをスライドさせるように取り外します。WiFiのアンテナもファン同様にケーブルがあるので引っ張ってしまわないように気をつけます。
ハードディスクを取り外したら元のハードディスクに付いているコネクタとネジを新しいSSDに付け替えます。付け替えたら元に戻します。
祈るように電源を入れ、OSのインストールを開始します。以前の環境からの復元はTimemachineを使えばとても簡単です。
メモリはDDR3 1600 PC3-12800 SO-DIMM
なものを使います。8Gのメモリ x 2枚で16GBが最大です。できれば32GBにしたいところですが...メモリも15,000円ほどで買うことができます。
唯一Late 2012よりLate 2014が羨ましくなるところ
4K出力です。Late 2012
は4K出力ができないので2560x1440
で我慢するしかありません。3万円ほど出せばWQHDのディスプレイを買うことができます。
結論
【リリース】車関連に特化したニュースアプリ:dotCars のAndroid版をリリースしました
先日iOS版をリリースしたところですが続いてAndroid版もリリースしました。
crossbridge-lab.hatenablog.com
ダウンロードはこちらから
一応技術ブログなのでちょこっと技術的?なことを。
iOS/Androidの両OSで出してるけど1ソースなの?
ノー、です。古くからWebView上で動かすハイブリッドアプリがあり、最近ではReact NativeやXamarinですかね。昔はワンソースで書けるメリットがあっても動作が遅いという欠点がありイマイチぱっとしませんでしたが、今ではそのような欠点もなくなっていると聞きます。(フレームワークによってはあるんでしょうけど)
ただ個人的にはそれらを使う気が起きないというのが正直なところです。どうせ各プラットフォームでゴリゴリにチューニングすることになるのだから最初から各プラットフォームのネイティブな言語で書いたらいいのでは?と思います。
じゃあXamarinとかがダメなのか?とも思っているわけではないです。企業が出すアプリで何かキャンペーンに使うアプリなど一発もので開発期間を短くしたりコストを下げたいという場合には打ってつけだと思います。過去に受託の会社で働いていたことがあるのですが客からXamarinどう?と聞かれることもあったので受託の会社でXamarinをやるのは良いと思います。(個人の感想です)
Kotlin使ってるのか?
ことりん可愛いよことりん。今回Androidは全てKotlinで書いています。Kotlinでアプリをちゃんと書くのは初めてでしたがSwift→Kotlinへの移植はとてもやりやすかったです。Databindingもちゃんと動くしKotlinを選択しない理由はないですね。
赤べこ本にはお世話になりました
おまえはサーバープログラミングもできたのか?
昔にPHPでちょこっと書いてたこともあったけど基本的にはクライアントアプリの人間です。今回の開発にあたりGo言語を勉強しました。ゴーファーくん可愛い。
APIなどバックエンドは全てGoで書いています。環境はAWSのELB、EC2、RDSを使っています。ELBを使ってるけどぶら下げているEC2は一台のみです。無料のSSL証明書を使いたいがために無駄にELBを使っています。無料という言葉はヤバイですね。
Go言語の勉強はこちらの本にお世話になりました
最後にもう一度AppStoreとPlayStoreへのリンクを