よしたく blog

ほぼ週刊で記事を書いています

docker-compose up で driver failed programming external connectivity on endpoint

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の9日目の記事です。

土日なので軽めのエラーが起きたよ記事で...

docker-compose up を実行したら、こんなエラーがでました。

ERROR: for learning_db_1_1e6e8a99351d  Cannot start service db: driver failed programming external connectivity on endpoint learning_db_1_31d4b0903210 (0d3e634a4f03ef01c57cf939de4777446d0635f2665ee57db6db00e0abe64325): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:5432:tcp:172.22.0.2:5432: input/output error

原因はdocker-compose up する以前にdockerで使っていたポートを掴んだままだったからエラーが発生したようです。

調べたら、Docker for Macを再起動すれば直ると書かれていたのでRestartしたら直りました。

Dockerで不具合が出たら「Dockerを再起動をする」。これが一番早い対処法になりつつあります。

yoshitaku-jp.hatenablog.com

docker-compose up で ERROR: An HTTP request took too long to complete.

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の8日目の記事です。

土日なので軽めのエラーが起きたよ記事で...

docker-compose up を実行したら、こんなエラーがでました。

ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).

調べたら、Docker for Macを再起動すれば直ると書かれていたのでRestartしたら直りました。

yoshitaku-jp.hatenablog.com

Parcelをさわってみた

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の7日目の記事です。

気になっていたバンドルツールのParcelを使ってみました。

parceljs.org

比較として並行してWebpackも触りましたが、設定ファイルを書かないお手軽さに完全に負けてしまい、Parcelばかり触ってしまいます。設定ファイルを用いて、開発と本番での使い分けができるのがWebpackのいいところで、Parcelはお手軽に試せるのがいいところでしょうか。

試してみたこと

基本的なことばかりですが、並べておきます。

  • インストール
  • CLI
    • コマンド
    • オプション
      • 出力先の変更
      • 出力ファイル名の変更
      • ブラウザ起動

インストール

グローバルな環境にインストールしています。 このタイミングでのバージョンは、1.10.3 でした。

npm install -g parcel-bundler

yoshitaku$ parcel -V
1.10.3

CLI

コマンド

準備

node.jsを使う前での準備です。実行済みでしたら必要ありません。

npm init -y

今回使用するindex.html です。

<html>
<body>
  <script src="./index.js"></script>
</body>
</html>

今回使用するindex.js です。

console.log('hello world')

ここまでの作業で、下記のディレクトリになっているはずです。

yoshitaku$ tree
.
├── index.html
├── index.js
└── package.json

ここから各コマンドを見ていきます。

serve

parcel index.html コマンドで開発用サーバーが起動します。dist ディレクトリが作成され配下にファイルが出力されます。デフォルトのポートは 1234です。ファイルを変更してもすぐに反映されます。 f:id:yoshitaku_jp:20181206074134p:plain

build

parcel build index.html コマンドでビルドができます。 dist ディレクトリが作成され配下にファイルが出力されます。

f:id:yoshitaku_jp:20181206074522p:plain

watch

parcel watch index.html コマンドで開発用のサーバを立ち上げずにファイルの変更を検知してビルドしてくれます。

f:id:yoshitaku_jp:20181206075200p:plain

オプション

出力先の変更

-d オプションで、出力先を変更できます。 例 parcel build index.html -d build/output

yoshitaku$ tree
.
├── index.html
├── index.js
└── package.json

0 directories, 3 files
yoshitakuMBA:parcel yoshitaku$ parcel build index.html -d build/
✨  Built in 325ms.

build/parcel.cb1a8511.js     1.08 KB    12ms
build/parcel.cb1a8511.map      190 B     6ms
build/index.html                73 B     6ms
yoshitakuMBA:parcel yoshitaku$ tree
.
├── build
│   ├── index.html
│   ├── parcel.cb1a8511.js
│   └── parcel.cb1a8511.map
├── index.html
├── index.js
└── package.json

1 directory, 6 files

出力ファイル名の変更

--out-file オプションで、出力ファイルの名前を変更することができます。

parcel build index.html --out-file output2.html

yoshitaku$ tree
.
├── index.html
├── index.js
└── package.json

0 directories, 3 files
yoshitakuMBA:parcel yoshitaku$ parcel build index.html --out-file output2.html
✨  Built in 315ms.

dist/parcel.cb1a8511.js     1.08 KB    14ms
dist/parcel.cb1a8511.map      190 B     7ms
dist/output2.html              73 B     6ms
yoshitakuMBA:parcel yoshitaku$ tree
.
├── dist
│   ├── output2.html
│   ├── parcel.cb1a8511.js
│   └── parcel.cb1a8511.map
├── index.html
├── index.js
└── package.json

1 directory, 6 files

ブラウザ起動

parcel index.html --open serve のときに使える限定のオプションです。

指定しておくと開発サーバが起動したタイミングでブラウザが起動してくれます。

感想

  • 基本的なコマンドをさわったが、非常に手軽だった。なにより早くビルドされるのが嬉しい。
  • 今度も軽いプロダクトを作るときはparcelを使っていきたい
  • Webpackも比較対象としてさわっておきたい

Chromeでキャッシュを無効にする

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の6日目の記事です。

Parcelを使っていたら、変更した内容が画面に反映されなくなり困りました。原因はbundle.jsと常時同じ名前を使っていたので、ブラウザでキャッシュを持ってしまい変更が適用されなかったようでした。

キャッシュを削除したり持たない方法を探していたら、Chromeでキャッシュを無効化する方法があることを教えてもらいましたのでTipsとしてメモを残しておきます。

デベロッパーツールを開く

f:id:yoshitaku_jp:20181128142949p:plain

Networkタブに移動し、Disable Cacheをチェックする

f:id:yoshitaku_jp:20181128143044p:plain

普段全てのデバイスApple使いの自分にとって、ブラウザもsafariでしたので気づきませんでした。キャッシュが原因じゃないかとご助言いただけたことと、Chromeのキャッシュ無効化を教えていただき感謝でした。

もうキャッシュのせいで半日ムダにすることがないよう気をつけます。

Firebase AuthenticationでGoogle認証をやってみた

f:id:yoshitaku_jp:20181205000333p:plain

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の5日目の記事です。

今回はFirebase AuthenticationでGoogle認証をやってみました。超簡単で便利!これを使えばログイン機能に頭を悩ませる必要ないんだなって思います。

AuthenticationのGoogle認証を有効にする

左側のタブのAuthenticationを選択し、次にログイン方法を選択します。 f:id:yoshitaku_jp:20181204211018p:plain

真ん中のGoogle欄の端にある鉛筆マークを選択肢します。 f:id:yoshitaku_jp:20181205072523p:plain

右上の無効を有効に変更します。 f:id:yoshitaku_jp:20181205072538p:plain

以上です。

ディレクトリと各ファイルの中身

ディレクトリ構成と各ファイルの中身を見ていきます。

ディレクト

.
├── index.html
└── src
    ├── App.vue
    ├── components
    │   ├── HelloWorld.vue
    │   └── Signup.vue
    ├── main.js
    └── router
        └── index.js

各ファイルの中身

src/main.js

main.jsにFirebaseの設定スクリプトを貼り付けます。

import Vue from 'vue'
import App from './App'
import router from './router'
import firebase from 'firebase'

Vue.config.productionTip = false

var config = {
  apiKey: 'your_apiKey',
  authDomain: 'your_authDomain',
  databaseURL: 'your_databaseURL',
  projectId: 'your_projectId',
  storageBucket: 'your_storageBucket',
  messagingSenderId: 'your_messagingSenderId'
}
firebase.initializeApp(config)

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

src/components/Signup.vue

Signup.vueでは、FirebaseでGoogle認証を呼び出し、'Create account: ' + obj.user.displayName と自身の名前をアラートで表示しています。アラートが消されたあとはトップページに遷移しています。

<template>
    <div class="singup">
        <button @click="signUp">登録</button>
    </div>
</template>

<script>
import firebase from 'firebase'

export default{
  name: 'Signup',
  data () {
    return {
    }
  },
  methods: {
    signUp: function () {
      var provider = new firebase.auth.GoogleAuthProvider()
      firebase.auth().signInWithPopup(provider)
        .then(obj => {
          alert('Create account: ' + obj.user.displayName)
          this.$router.push('/')
        })
        .catch(error => alert(error.message))
    }
  }
}

</script>

src/router/index.js

ルーター機能を使っています。URLでsingupにたどり着けれればなんでも大丈夫だと思います。

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Signup from '@/components/Signup'
import Signin from '@/components/Signin'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/signup',
      name: 'Signup',
      component: Signup
    }
  ]
})

デモ

ユーザがいない状況から、登録ボタンを教えて、ユーザが登録されるところまでです。個人情報に黒塗りしています。

f:id:yoshitaku_jp:20181204235124g:plain

まとめ

  • あまりGoogle認証をやってる人がいなくてまとめた
  • 手軽にSNSなどの認証ができてすごい…
  • 他の機能も早くさわってみたい

github.com

秋の夜長の自由研究LT大会の振り返り会をしました

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の4日目の記事です。

リハーサルの様子と本番の様子はこちら

リハーサル会 yoshitaku-jp.hatenablog.com

本番 yoshitaku-jp.hatenablog.com

振り返り会をしました

12/3に秋の夜長の自由研究LT大会の振り返り会をしました。 各自、自分と会全体のKPTをしてきました。会全体に対する指摘は会の中で消化するとして、自分のKPTと共感したものを載せておこうと思います。

KPT

KPTとは、「Keep・良かったこと」「Problem・良くなかったこと」を振り返り、「Try・これからやっていくこと」を検討する手法です。

Keep

  • 銭湯の話題で統一したスライドが作れた
    • 背景などにこだわり銭湯の話をしているぞ感を常に出せたのは良かったと思う
  • 1スライド1メッセージの徹底ができた
    • これは学生時代からの流れで徹底できていたと思う
  • 小道具を用意した
  • 原稿を用意していたので途切れることがなく喋れた
    • 本番は見なかったけど、頭の中に入っていたのでOK
  • リハ会で経験済みだったので、緊張感が和らいだ
    • みんな書いていたけど、一度経験したことで本番での緊張が開くなったと思う
  • マイクを使わなかった
    • マイクを使わない声量を維持できた

Problem

  • PCのアダプター周りの確認
    • 当日にHDMIにつなぐアダプターあるかなとあたふたしたので、自分から運営に確認をプッシュする姿勢が必要であったと思う
  • 小道具を活かしきれなかった
    • 持ってきたものの、結局使う場面が少なかった。
    • レーザポインターはスライドの送りで活用できたので良かった
  • 前を見て話せていなかったのが少なかった
    • これはスライドが多かったのも原因
    • 今どこまで行ってるか確認するために見る必要があったため
  • リハ会でのフィードバックが少なかったように感じた
    • 今回は人が多かったので難しかったかも知れない
    • とは言え、フィードバックをもらうための回だったので少し残念。
  • マイクがちゃんと使えていなかった
    • リハ会で練習していなかったので仕方がないかも知れない
  • リハ会でやってみなきゃわからないことがある
    • 資料の色の明暗とか
    • 時間配分とか
  • 会場と一体感が出るLTにしたかった
  • 自分のLTなので、「自分の体験談」とかもっと盛り込むべきだった
    • 歴史とかの紹介だと、wiki見たほうがいいとなってしまう
  • 立ち居振る舞い
    • 動画を撮っていただけると自分が意識していないことにも気づけそう

Try

  • 真面目な登壇
    • 今回カジュアルなテーマでの登壇をしたので、次回は技術ネタでやりたい
  • 会場内を歩いたり、落ち着いたプレゼン?
  • マイクを使う・使い方の研究
    • Problemにも書いた
    • 自分だったらどうしたかの回答が出ていないので模索していく
    • 持たないのは一つの正解なのかも知れないと思ってはいる

ariaki4devさんからのお言葉

リハ会でのレビューとかが少なくて嘆いていたらariaki4devさんからありがたいお言葉をいただけました。

よしたくさんは内容すごくきれいにまとまっていて、声もはれていたし、動いていなかったので、すごく良かったですよ。 最初から比べてだいぶ変わりましたしね。 次はやっぱり会場を見るのと、レスポンスを得られる構成と、謎と気づきを与えるコンテンツ作りをすればもうLTプロです!

ありがたい…

まとめと告知

次回は

  • 会場を見る
  • レスポンスを得られる構成
  • 謎と気づきを与えるコンテンツ作り

を意識して取り組んでみたいです!!!

次回のLTは

engineers.connpass.com

です。成長した姿をお見せできれば…!

以上!

第12回 Raspberry pi もくもく会 に参加して、isaaxをさわってきた

f:id:yoshitaku_jp:20181203171302j:plain

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の3日目

Isaax Advent Calendar 2018 - Qiita の3日目

の記事です。

第12回 Raspberry pi もくもく会に参加してきました。

raspberry-pi-moku.connpass.com

isaaxを触ってみた

今回は久々にisaaxを触ってみました。 RapberryPiにはFTPでつないでやることも可能ですが、エディタをAtomからVSCodeに乗り換えたタイミングで拡張機能の導入を見送り、isaaxを試してみました。

isaaxとは

Isaaxは面倒な手間を省いて、gitレポジトリとIoTデバイスをつなげるサービスです。

Isaax IoT

要はGitHubとかにプッシュすると、それを検知してRaspberrypiなどのIoTデバイスへファイルのデプロイやスクリプトの実行をしてくれる便利なサービスです。どこ直したとか忘れてしまうこともあるので、gitで管理できるのもいいですね。

isaax.jsonの書き方に注意

【追記 2018/12/03】
こちらスタッフの方に原因を調査していただいています

【追記 2018/12/04】
こちら原因は改行ではなかったです
XSHELL Chief Product Officer の 杉田さん にフォローいただきました!

迅速な対応ありがとうございました!

https://github.com/yoshitaku-jp/raspberry-pi-product/pull/1/filesgithub.com

【追記ここまで】

プロジェクトの書き方などは公式のほうが親切なので割愛し、今回は一つハマったことがあったのでメモしておきます。

isaax.jsonという、isaaxに「RapsberrPiでこういうことやってくれ!!!」と伝えるものがあります。

{"name": "test_app","version": "","description": "","author": "","license": "","language": "","scripts": {"start": "node /var/isaax/project/hello_world/hello_world.js"}}

それを、最近node.jsを触る機会が多かったので、package.jsonのような形に直して実行しました。

{
    "name": "test_app",
    "version": "",
    "description": "",
    "author": "",
    "license": "",
    "language": "",
    "scripts": {
        "start": "node /var/isaax/project/hello_world/hello_world.js"
    }
}

すると動きませんでした。 isaax.jsonは1行で表現しないといけないようです。

加えて、

{"name": "test_app","version": "","description": "","author": "","license": "","language": "","scripts": {"start": "node /var/isaax/project/hello_world/hello_world.js"}}
//空行

末尾に空行を入れている場合もダメみたいです。

設定ファイルを勝手にいじらないほうがいいですね。教訓になりました。

無事にサーバーが起動しHelloWorldが見れた

直してからは、 node.jsをインストールし、node.jsでHello World を表示されることができました。

ネットの情報はGoogle Apps Scriptでいろいろ集められるので、家の情報をRapsberryPiで収集して見ようと思います。最近触れていないので初心に帰ります。

Raspberry pi もくもく会 今年一年お世話になりました! 来年も機会があればいかせていただきます!よろしくお願いいたします!

ここまでもくもく会で書き終えられてよかった!

Firebaseについて理解が深まる公式YouTube

f:id:yoshitaku_jp:20181128144942p:plain

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の2日目の記事です。

Firebaseについて理解が深まる公式YouTube is これ

www.youtube.com

何がある?

は載っている。(2018/12/01現在)

他にもサミットや過去のイベント の動画もあったりします。

プレゼンの勉強になる

動画がすごく作り込まれています。プログラミング関係で誰かに説明するときのために写し方とかは参考になるんじゃないかと。

CircleCIをローカルで動かす

f:id:yoshitaku_jp:20181203152044p:plain

この記事は、yoshitaku_jpの1人 Advent Calendar 2018 - Adventar の1日目の記事です。

設定ファイルの構文が間違っていたりしたとき修正後にpushするのがめんどくさくなったので、ローカル環境で実行する方法を見つけてきました。

macOS

brewでインストールできます。

brew install circleci

https://circleci.com/docs/2.0/local-cli/#alternative-install-on-macos-with-homebrew

macOS or Linux

この方法でもいけます。Linuxはこちら。

curl -fLSs https://circle.ci/cli | bash

https://circleci.com/docs/2.0/local-cli/#installing-the-circleci-cli-on-macos-or-linux

実行

実行前の制限事項

いくつかローカルでは使えない機能があるので、実行する前に並べておきます

  • キャッシュは使えない
  • 環境変数の設定の仕方 -ワークフローは対応していない

キャッシュは使えない

save_cacherestore_cacheは、スキップされてwarningが表示される。現在サポートしていない記述があるので、将来的にはあるのかなぁ。

環境変数の設定の仕方

Environment Variables が使えないので別の方法で設定します。

-e で使えます。 circleci build -e VAR1=FOO -e VAR2=BAR

ワークフローは対応していない

ローカルのdockerを使って実行しているようで、ワークフローには対応していません。

実行コマンド

cd //対象のプロジェクト
circleci build

その他のコマンド

circleci config validate

circleci config validate で、設定ファイルの記述が正しいか教えてくれる

正しい形

yoshitaku$ circleci config validate
Config file at .circleci/config.yml is valid.

checkout の前のハイフンを削除してみた

   steps:
       checkout

      - run: npm install
      - run:
          name: 'Install Dependecies'
          command: npm install -save firebase-tools

実行結果

yoshitaku$ circleci config validate
Error: Unable to parse YAML
mapping values are not allowed here
 in 'string', line 12, column 12:
          - run: npm install

circleci local execute --job JOB_NAME

単独のジョブを指定できる。 testとbuildとdeployを分けてる場合があるかも知れないが、ワークフローで一気にやることなく、個別で動かすことができる。

write-blog-every-week について

この記事は、write-blog-every-week Advent Calendar 2018の1日目の記事です。

write-blog-every-week への Joinはこちらから

【12/11追記】
急激に参加者が増えたため、現在新規募集を締め切っております。 詳細は↓のブログへ kojirooooocks.hatenablog.com
【12/11追記ここまで】

write-blog-every-weekとは

毎週月曜日から日曜日までの間に、ブログに1記事上げることを目標としている会です! ブログの内容については問いません!

週に1記事上げるだけです!!!

どんな人がいるのか

2018/12/01時点で22人在籍しています。10月に発足してから、口コミで増えてここまで大きいものになりました。詳細はわかりませんが、ほぼ9割近くがITエンジニアです。ITエンジニアじゃない方もいらっしゃいますが、全然関係ありません。みんな好きなことを書いています。

例えばこんなエントリが上がってきました。 職業柄かIT系のニュースに多く注目してしまいますが、僕はスポーツをやるのでこのエントリを興味深く読みました。

aniithing.hatenablog.com

いいところ3つ

やる気にさせてくれる

Slackにブログの更新情報が流れてくると、リアクションしたり、内容についての議論が始まったりします。誰が見ているかわからないネットの世界に対してブログを更新し続け、モチベーションを維持していることは難しいです。しかし、write-blog-every-weekではほぼ全員が反応をくれるのでちゃんと読んでくれている人がいるんだと思うと自分は継続できます。 さらに、ブログを落としそうなときは、みんながほどよく煽ってくれるのでやらなきゃという思いが働きます。

ネタ出しに協力してくれる

自分はブログネタに困ったときに、別の方にネタ出しを付き合ってもらいました。同じタイミングで、write-blog-every-week内でも悩みを抱いている人が出てきたので「ネタ出し」チャンネルを作成し、たまにワイワイしています。

aniithing.hatenablog.com

技術相談ができる

日々アウトプットをしている方々なので知見が多くあり、実体験をもとにした話をしてくださいます。悩みを相談し解決することで、それがブログのネタになるため、自分は積極的に相談しています。相談に載ってくれる方には本当に感謝しています!

これからどうしたいか

人が増えてほしい

「個人的に」の話ですが、もっと人が増えてほしいです。活気あるグループとなり、ブログを継続することで幸せになる人が増えていってほしいと思います。

脱落する人を減らしたい

脱落する人を減らしていきたいです。ほぼ公式ルールとなってきていますが、4週分書かないと退会処分となります。今現在は2名退会となってしまいました。Slackを覗いてくれないと意味がないのですが、どうやってやる気を取り戻してもらうかメンバーと創意工夫しています。いい案があったら教えてください。

サイトを作りたい

tadaken3が別のコミュニティで作っているようなサイトを作ってみたいです。 これは本当に自分が勝手にやりたいと思っているだけです。 we-love-blog.netlify.com

tadaken3.hatenablog.jp

まとめ

現状報告とこれからを軽く語っただけになったけど、良かったのだろうか。初日だしハードルは低く… これをみて誰か入ってきてくれる人がいると嬉しいな。

write-blog-every-week への Joinはこちらから

【12/11追記】
急激に参加者が増えたため、現在新規募集を締め切っております。 詳細は↓のブログへ kojirooooocks.hatenablog.com
【12/11追記ここまで】

僕が酔っ払った勢いで作ったアドベントカレンダーをみんなが埋めてくれて嬉しい! 12月2日はbudougumi0617さん!よろしくです!

追記

中には一人アドベントカレンダーをやっている人たちがいます!自分もですが!

ご覧ください!

kojirooooocks.hatenablog.com

mozy-ok.hatenablog.com