nFact

n!

gcloud source repos cloneが失敗するのを回避する

GCPGoogle Source Repositoriesからgitリポジトリをcloneできなくなったときの回避法です。

通常、下記のコマンドを用いることで、GCP上でホストされているプライベートリポジトリをGCPの認証情報を利用してcloneすることが出来ます。

gcloud source repos clone REPO_NAME --project=PROJECT_NAME

原因は分かっていませんが、cloneが行われるときに認証用のダイアログが表示されることがあります。
プライベートリポジトリなので入力しなければ、と考えてうっかりこのダイアログでIDとパスワードを入力してしまうと、そのIDが合っているかどうかにかかわらず、 gcloud init をし直す等をしてもcloneができなくなってしまいます。

>gcloud source repos clone app app
WARNING: If your system's credential.helper requests a password, choose cancel.
Cloning into '(略)'...
fatal: remote error:


Invalid authentication credentials.

Please generate a new identifier:
  https://source.developers.google.com/auth/start?scopes=https://www.googleapis.com/auth/cloud-platform


ERROR: (gcloud.source.repos.clone) Command '['git', 'clone', '(略)', '(略)', '--config', 'credential.helper=!gcloud.cmd auth git-helper --account=アカウント名 --ignore-unknown $@']' returned non-zero exit status 128

最初に WARNING: If your system's credential.helper requests a password, choose cancel. と警告が出ていますね。
このエラーをスルーして入力してしまうと、cloneできない問題が発生します。
一度失敗するとエラーで表示されている通り再認証を行っても、 gloud init を行っても、cloneがずっと失敗する状況になってしまうのがこの問題の厄介な点です。

この問題の解決方法

Gitに登録されている credential.helper の設定を削除し、再設定します。

Windowsであれば管理者権限で実行します。

git config --system --unset "credential.helper"
git config credential.helper gcloud.cmd

これでcloneができるようになりました。

なぜ?

この設定は、Source Repositoriesをリモートとして追加するときに実行する git config credential.helper gcloud.cmd によって書き込まれる設定で、
先程表示されたダイアログにID、パスワードを入力してしまうとここの設定がおかしくなってしまうようです。(gcloud.cmdとなっているべきところが、managerなど別のものになってしまう)
なので、この設定を再設定することで、cloneすることができるようになります。

DevFest Tokyo 2017に行ってきました

f:id:noko_k:20171009094225j:plain

今日はDevFest Tokyo 2017に行ってきました。
去年も参加していたので今回で2回目になりますが、記事にするのは今回が初めてです。

DevFest Tokyoとは

gdg-tokyo.connpass.com

GDG(Google Developer Group)が開催する開発者向けのイベントになります。
DevFestは日本だけのイベントではなく、世界中で開催されているようです。
「ボーダーレス」がテーマとなっていて、色んな分野のコミュニティがワイワイしていました!

オープニング

去年に引き続き、今年もコミュニティ紹介からスタート。
性コミュニティ増えた?かな?コミュニティ多い!

去年は最後に写真撮影をしましたが、今年はこの時間に撮影。
ガッツポーズで!って言われたけどなんかみんなバンザイしてたw

発表中に出てきたGopherがやはりかわいい。

聞いてきたセッション

クラウドってなんだろ?クラウドを活かすアプリケーションの設計とは?

docs.google.com

クラウドとはそもそも何か?から、
いざクラウドでアプリケーションを開発するときにどのような点に気をつけるべきか?をメインに基本的なところを押さえられるセッションでした。

  • クラウドの強みはAPIにある
  • クラウドも壊れる。しかしすぐに蘇る
  • 壊れるのを前提で設計をするべき。具体的にはリトライとリクリエイトを考慮する。さらには適切なタイムアウトを設定する。
  • サービスの単位で見るとすぐに蘇るが、リクエストを送ったその瞬間のリクエストは復活できない。
  • 当たり前だが障害が発生したインスタンスが持っていたメモリの内容は消失するので、特にGCE等のIaaS側で状態を持たないようにする。
  • GCE側で状態を持たないようになると、不要なときはインスタンスを閉じておけるなどコスト的なメリットもある。

LT

スケジュールに無かったものの急遽設定されたLT。

「近くにデイリーヤマザキしか無いからこの時間を潰すのはちょっと厳しいかと思って」
そうなんですwまさに暇してたところでしたw

Abema TVの人が多かった(3人)。聞きやすかったです。
後の方に法律関係の方のLTがあったのですが新鮮で良かったです。ちょい時間オーバーでしたがw

GCPパネルディスカッション

GCPのサービスを計算とストレージの2つに分けてあれこれ話していくゆるいパネルディスカッションでした。

「GCEは使ったことあるんだけど他は全然知らないんだよねーw」的なところが本当にあるあるで、話の内容も楽しく分かりやすかったですw

ストレージ周りの話が聞けたのが良かったかな〜と

あとは、よくある前に何人か座って、順番に話すみたいな(ちょうど次のセッションみたいな)ものではなかったのでこれはこれはゆるくて良いなーと思いました。新鮮な感じ。

  • GCPのサービスのロゴが全部六角形で見づらい。たまにGCP側の人でも間違えてる(w) これすごく分かる
  • Dataprep便利そうなので使っていきたい
  • 「StackDriver Monitoringはすべてのユーザーが幸せになれるサービス」
  • バッチならDataFlowに任せたほうが、構成がすっきりする上に安く済みそうなのでこちらも使っていきたい
  • SpannerはFK使えない、主キー必須など内部のKVSが見え隠れする点でRDBと同列に扱うのは微妙っぽい。そして高い
  • DataStoreの内部はBigTableで実現されている

Goによるプロダクト開発 〜設計、テスト、Go2に向けて〜

こちらもパネルディスディスカッションでした。
はてなのMeckerelの方、Mercariの方、エウレカの方、CyberAgentAWAの方の4人出ていました。

  • goはチーム開発に使いやすい。go fmt等のツールが充実している
  • AbemaはGoを使って15人で開発している。多い!
  • 毎週勉強会をやっているはてなすごい
  • パッケージの話をすると止まらないエウレカの方の話をもう少し聞いてみたかったw
  • 後方互換大事だけど新しい機能も使いたい
  • GoにGenericsは要るか?→sliceになら使いたいかも程度

途中に紹介されていた記事。 後で読む。

www.ymotongpoo.com

いまさら聞けないPWA講座

今日一番学びがあったセッション。
私自身は「PWA、名前は知っているんだけどどういうものなのかよく分かってないんだよねー」程度の知識レベルでしたが、
PWAのメリットや、やらなければいけないこと、すべきことについて分かりやすく説明してくれた点がすごく良かったです。
勉強せねば。

  • PWAにするとAndroidの場合はネイティブアプリのように使える
  • PWAからIntentも飛ばせる
  • PWAのポイントはFIRE(Fast Integrated Reliable Engaging)
  • PWAにするとストレージ容量の削減になる。Twitter Liteの容量は0.6MB
  • PWA = SPAではない。
  • Service WorkerのAPIは低いレイヤーを触る感じなので扱いづらい。ライブラリを使う。https://workboxjs.org/
  • APIで出来ることが強力になっていくので、HTTPSが前提条件となっている
  • SafariでのService Workerは開発中なので今後に期待

確かにこれ気になりました。
App Storeと競合しそうですしどうするんでしょうね。

クロージング

まさかのネットワーク不調によりエアスライドとサムネイルによる発表になってしまいましたが
それはそれで面白かったですw

聞けなかったセッション

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える

超人気。移動中に立ち見含め満員との告知があり入れずw
Go人気すさまじい。

まとめ

全体を通して面白くて、コミュニティの方々もワイワイしてて楽しいイベントでした!
また参加したいと思います!

お疲れ様でした!

Debian StretchにRailsがすんなり入らないときのメモ

$ sudo apt install ruby sqlite3
$ sudo gem install rails

この後OSに死ぬほど怒られた

コマンド一発でインストールできないフレームワークって…というわけで頑張るログ。

mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h で怒られる

事象

$ sudo gem install rails
Building native extensions.  This could take a while...
ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.
    current directory: /var/lib/gems/2.3.0/gems/nokogiri-1.8.0/ext/nokogiri
/usr/bin/ruby2.3 -r ./siteconf20170814-1797-1ktxt56.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h
extconf failed, exit code 1
Gem files will remain installed in /var/lib/gems/2.3.0/gems/nokogiri-1.8.0 for inspection.
Results logged to /var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/nokogiri-1.8.0/gem_make.out

確認すべきところと解決策

1. RubyRubygemsのバージョンを確認する

Rails 5.1.3は Ruby 2.2.2、Rubygems 1.8.11以上が要求されている。

$ ruby --version
ruby 2.3.3p222 (2016-11-21) [x86_64-linux-gnu]
$ gem --version
2.5.2

aptから降って来るRubyが古い。。。(いつもの話

2. ruby-devを入れる。

mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

mkmfと呼ばれるライブラリに ruby.h が含まれていないことに起因するエラー。

ruby-dev(CentOSならば ruby-devel) をインストールすると解消する。

sudo apt install ruby-dev

checking if the C compiler accepts ... *** extconf.rb failed *** で怒られる

事象

$ sudo gem install rails
Building native extensions.  This could take a while...
ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.
    current directory: /var/lib/gems/2.3.0/gems/nokogiri-1.8.0/ext/nokogiri
/usr/bin/ruby2.3 -r ./siteconf20170814-1913-1ni2g2j.rb extconf.rb
checking if the C compiler accepts ... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Cコンパイラ系のエラーっぽい。

解決策

build-essential をインストール

調べたらそもそもmkmfがMakefileを作るやつとのことだったので、 makeやらCやらC++が一式入ってないとまともに動かないだろうと判断。

sudo apt-get install build-essential

困ったときの build-essentialで解決。

zlib is missing; necessary for building libxml2 で怒られる

事象

ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.3.0/gems/nokogiri-1.8.0/ext/nokogiri
/usr/bin/ruby2.3 -r ./siteconf20170814-7887-bxemei.rb extconf.rb
checking if the C compiler accepts ... yes
Building nokogiri using packaged libraries.
Using mini_portile version 2.2.0
checking for gzdopen() in -lz... no
zlib is missing; necessary for building libxml2
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

zlibが無いらしい。

解決策

zlib1g-dev をインストールする。

$ sudo apt install zlib1g-dev

これで解決した。


私のQiitaより転載した記事になります。

qiita.com