WindowsでLinuxのfindのような検索を行う
WindowsでLinuxのfindコマンドと同等のものをやりたいとき、結構困りますよね。
うっかりWindowsのFINDを使ってしまうと
FIND: パラメータの書式が違います
とか言われてしまう…これがあのいつものdirコマンドでなんとかできます。
dir
コマンドを使ったfindのような検索
dirコマンドの再帰的にファイルを表示するオプションを使う方法です。
dir /s /b *検索文字列*
例えば「カレントディレクトリ以下のJavaファイルを検索したい場合」は
dir /s /b *.java*
となります。
find . -name "*.java"
に近い結果が表示されます。
dirに指定しているオプションの/s
と/b
の意味は次のとおりです。
/B ファイル名のみを表示します (見出しや要約が付きません)。 /S 指定されたディレクトリおよびそのサブディレクトリのすべての ファイルを表示します。
他に設定できるオプションの詳細は次のコマンドでわかります。
dir /?
コマンドの返り値( %ERRORLEVEL%
)によって、ファイルが見つかったかどうかがわかります。
0が返ると検索成功、1が返ると検索失敗(ファイルが見つからなかった場合など)です。
... > dir /s /b *.java* (ここに結果が表示される) ... > echo %ERRORLEVEL% 0 ... > dir /s /b *.javaaaaaaa* ファイルが見つかりません ... > echo %ERRORLEVEL% 1
これを覚えればFINDで怒られることもなさそうです。
Cloud Source RepositoriesからGKEへアプリケーションをデプロイさせるまでの流れ
5/26に正式公開となったCloud Source Repositoriesから、GKEへアプリケーションをデプロイさせるまでの流れについて、試してみたので記事にしてみます。
TL;DR
Cloud Source Repositoriesとは
GCP上でホストされるgitリポジトリです。プライベートリポジトリをほぼ無制限に*1持つことができるのが特徴です。
コミット履歴の表示、ソースの編集機能など、最低限必要な機能は一通り揃っている上、Stackdriverなどの既存サービスと統合されています。こちらは後日試していきたいですね。
Cloud Source Repositoriesを始める
コンソールに移動して、左カラムから「Source Repositories」を選択します。
これが初めての画面ですね、ワクワクしますね!
「開始」を押すと、最初のリポジトリ名を何にするか聞かれます。
作成すると、次のような空のリポジトリの画面が出てきました。
3つの選択肢がありますが、それぞれ、
「ローカルGitレポジトリからCloudレポジトリへのコードのpush」
今持っているソースはGitHubやBitBucketにホストされていないソースで、ローカルに持っている場合、このオプションが使えます。 Google Cloud SDKが必要です。
「ローカル Git レポジトリへの Cloud レポジトリのクローン作成」
外部ホスティングサービスや手元にソースが無く、Cloud Repositoriesから新規のリポジトリを作成する場合は、こちらを選択します。 こちらも、Google Cloud SDKが必要です。
「GitHub または Bitbucket からの自動ミラーリング」
既にGitHubやBitBucketを利用している場合は、このオプションが一番楽だと思います。ブラウザのみで完結します。
今回は、3つ目のミラーリングを試してみようと思います。 *2
GitHubのリポジトリをSource Repositoriesへミラーリングする
3つ目のミラーリングを選択して、GitHubへ接続すると、GCPがリポジトリ一覧を引っ張ってきてくれるので、 ミラーしたいリポジトリを選択してから「接続」をクリックします。
すると、120MBぐらいのリポジトリでしたがものの数秒でリポジトリがミラーされ、GCPからソースが見えるようになりました! :tada:すごい時代になりましたね。
pushトリガーを作成する
ソースがGCPに上がったので、pushをトリガーにしてコンテナをビルドしたいと思います。
「Container Registory」から、「トリガーの作成」へ移ります。
画面の表示の通り、設定をさくさく進めていきます。
今回は、タグがpushされたときにトリガーしたいので、「トリガーのタイプ」を「タグ」にし、イメージ名を
gcr.io/プロジェクト名/$REPO_NAME:$TAG_NAME
に変更しました。
使える変数は、 $PROJECT_ID
, $REPO_NAME
, $BRANCH_NAME
, $TAG_NAME
, $COMMIT_SHA
があるみたいです。
トリガーを実行する
作成したトリガーを、リポジトリへのpushなどで動作テストをします。
ビルドの進捗は、「ビルド履歴」から見ることができるようで、リアルタイムにログなどから状況を知ることができる上、Stackdriver Loggingにもログが転送されていますので、エラーが発生したとしても後で追うことができます。便利ですね。
ビルドが完了したら、「Container Registry」で確認をすることができます。
先程のイメージ名で設定したとおり、1.2
のタグを打ってpushすると
gcr.io/プロジェクト名/さっき作ったリポジトリ名:1.2
のような名前でイメージが出来上がりました。
GKEへのデプロイ
Container Registryに保存されているので、gcloud
コマンドなどで、デプロイすることができます。
Container Engineで、次のようなコンテナクラスタがあるとします。 既にある方は読み替えて頂いて、無い方は新しく作るなどをしてください。
- クラスタの名前:
c-1
- ゾーン:
asia-northeast1-a
Google Cloud SDKのプロパティセット
# プロジェクトのセット $ gcloud config set project nfact-sandbox Updated property [core/project]. # ゾーンのセット $ gcloud config set compute/zone asia-northeast1-a Updated property [compute/zone]. # クラスタをセット $ gcloud config set container/cluster c-1 Updated property [container/cluster]. # 資格情報を取得 $ gcloud container clusters get-credentials c-1 Fetching cluster endpoint and auth data. kubeconfig entry generated for c-1.
デプロイ
# nginxという名前で、gcr.io/nfact-sandbox/nginx-lb:1.2 のイメージをデプロイ $ kubectl run nginx --image=gcr.io/nfact-sandbox/nginx-lb:1.2 --port=80 deployment "nginx" created # Podsの状態を確認 $ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-408405411-phglg 1/1 Running 0 24s
STATUSがRunningになっていますね!デプロイができました!
まとめというか雑感
JJUG CCC 2016 Fallに参加してきました。
前回がJavaOne報告会の記事だったんですね。お久しぶりな感じです。
JJUG CCCの参加はこれで3回目ですかね。
今回も過去最大の規模を記録したらしく、
計48セッション、9トラック(うち1つはブース展示とショートセッション)、
約900人くらいが参加したとのことで、Scala Matsuri以来の大規模なイベントでしたw
サイトがこちら
www.java-users.jp
結構良い感じのデザインの特設サイトもできてましたwすごい。
セッションの質も運営のレベルもかなり高いです。
発表していただいた方々、スタッフの方々には本当に感謝です。ありがとうございました。
参加したセッション
今日は午後からの参加でした。
雑なコメントなので内容とかはその資料とかを見ていただく感じで。
- Javaエンジニアのためのブロック チェーン入門
bitcoinとかでよく話題に出てくるブロックチェーンってなんだろう?的な概念的なところから、分散台帳、その仕組み、マイナーとビットコイン、競合?サービス諸々。 あと、発表者の方がエヴァのフォントを購入してました。
P2Pノードに同一の記録を同期し、一定のルールで正当性を決定する仕組みがブロックチェーン #ccc_gh3
— noko.(「・ω・)「☕ (@noko_k) 2016年12月3日
- GitBucketを支えるJava技術とグローバルで使われるOSSの作り方
@takezoenさんのセッションで割りとテンション上がって聞いてました。
技術力もすごいですがコミュニティを作るための取り組みというか地道だけどすごい...。
OSSの成長に必要なもの
— noko.(「・ω・)「☕ (@noko_k) 2016年12月3日
ユーザー、開発者、コミュニティ、エコシステム #ccc_cd4
あと、Twirlとか見て、やっぱりタイプセーフなのは良いよなぁと思いました。
タイプセーフなの良いよなぁ #ccc_cd4
— noko.(「・ω・)「☕ (@noko_k) 2016年12月3日
もっとサービスを運用する上でのリアルな話、例えばプロダクトの実装上の問題とか、Java本体の問題とか、泥臭い話が聞きたかった感があるんだよなー
— noko.(「・ω・)「☕ (@noko_k) 2016年12月3日
Xtendはclassファイル吐かないのか〜トランスパイラだったのね #ccc_f6
— noko.(「・ω・)「☕ (@noko_k) 2016年12月3日
- Featherweight JavaやGroovyの漸進的型付けについて0(:3 )〜 #ccc_f6
— noko.(「・ω・)「☕ (@noko_k) 2016年12月3日
Groovyが漸進的型付けを実現してるんじゃないか?という話でした。
式はわからなかったけど感覚的になんとなくなるほど〜!ってなりました。
懇親会
🍺🍺🍺🍺🍺🍺🍺
まとめ
最初にも書きましたが、本当に良いイベントでした。
会社の開発とかだとテンション上がらないし、
こういう良い刺激を受けて、新しいものを追い続けて行かないとなー!
と思いました。
おつかれさまでした!