Eclipsコードリーディング メモ (AI記事)
1. 「ジャンプ」と「戻る」をセットで覚える
コードの海で迷子にならないための基本中の基本です。
• 定義へ移動 (F3):
変数やメソッドの上で押すと、その定義元へジャンプします(Ctrl + クリック でも可)。
• 前の場所に戻る (Alt + ←):
これこそが最重要です。 ジャンプして中身を確認した後、即座に元の思考場所に戻れます。ブラウザの「戻る」ボタンと同じ感覚で使いましょう。
2. 「どこで使われているか」を瞬時に把握する
そのメソッドや変数の影響範囲を知るための機能です。
• 呼び出し階層を表示 (Ctrl + Alt + H):
選択したメソッドが「どのメソッドから呼ばれているか」をツリー形式で表示します。逆引きで全体の流れを追うのに最強のツールです。
• 参照検索 (Ctrl + Shift + G):
ワークスペース全体から、その変数が使われている箇所を一覧表示します。
3. クラスの構造を「俯瞰」する
数千行あるクラスを上から下まで読むのは非効率です。
• クイック・アウトライン (Ctrl + O):
開いているファイルのメソッド一覧をポップアップ表示します。
• もう一度 Ctrl + O を押すと、継承元の親クラスのメソッドまで含めて表示されます。
• そのまま文字を打てばフィルタリング(検索)できるので、目的のメソッドへ一瞬で飛べます。
• 型階層の表示 (F4):
そのクラスがどのクラスを継承し、どのインターフェースを実装しているかを可視化します。オブジェクト指向の設計を理解するのに必須です。
さらにリーディングを加速させる小技
• 型を開く (Ctrl + Shift + T):
ファイル名(クラス名)がわかっていれば、プロジェクトツリーから探す必要はありません。
• リソースを開く (Ctrl + Shift + R):
XMLやプロパティファイルなど、Java以外のファイルを探す時に。
• 画面分割:
エディタのタブをドラッグして端に持っていくと画面を割れます。「呼び出し元」と「呼び出し先」を並べて読むと理解が捗ります。
大規模なコードを読むときは、Eclipseの 「ブレークポイント」ビュー や 「タスク・タグ(TODO)」 をメモ代わりに使うのもアリです。
気になったところに // TODO ここから調査 と書いておけば、後で一覧から戻ってこれますよ。
Java固有
1. 抽象と実体を見分ける(インターフェース)
Javaのコードを読んでいると、F3(定義へ移動)を押しても「インターフェース(中身がない宣言)」に飛んでしまい、実際の処理がどこにあるか分からないことがよくあります。
• 実装クラスへジャンプ (Ctrl + T):
メソッド名の上で Ctrl + T を押すと、そのインターフェースを実際に実装しているクラス(実体)がリストアップされます。そのまま選択すれば、本当のロジックへ飛べます。
• なぜ重要か: Javaは「インターフェースに対してプログラミングする」文化が強いため、このテクニックを知らないと「中身がない!」とパニックになります。
2. アノテーション(@)の役割を特定する
最近のJava(Spring Bootなど)は、コードそのものよりも @(アノテーション)が魔法のように処理を動かしていることが多いです。
• @Override: 親クラスの何を書き換えているのか、親のメソッドも併せて読みましょう。
• @Autowired / @Inject: インスタンスがどこから注入されているかを探します。Eclipseの「型階層」が役立ちます。
• @Transactional: そのメソッドが「失敗したら巻き戻る」範囲であることを示します。エラーハンドリングを読む際の鍵になります。
3. Java 8以降の「Stream API / Lambda」の読み方
古いJavaに慣れていると、Stream API(stream().filter().map().collect())は一気に難解に見えます。
• コツ: ドット(.)ごとに改行して読むイメージを持ちましょう。
• filter:データの絞り込み(何を除外しているか?)
• map:データの変換(型が何に変わったか?)
• デバッグの裏技: Eclipseの最新版に近いものであれば、Streamの途中にブレークポイントを置いて 「Trace Current Stream Chain」 ボタンを押すと、データがどう変化していくか視覚的に確認できます。
4. 継承関係を可視化する
Javaの「多態性(ポリモーフィズム)」を理解するには、クラス図的な視点が必要です。
• 型階層(Type Hierarchy)を活用:
• クラス名を選択して F4 を押すと、そのクラスの「先祖」と「子孫」が一覧できます。
• 「あぁ、これは ArrayList だけど、結局 List として扱われているんだな」といった立ち位置が分かると、コードの意図が見えてきます。
5. ライブラリの中身まで追いかける
自分の書いたコードだけでなく、JDK標準ライブラリや外部ライブラリ(Maven/Gradle経由)のソースも読みましょう。
• Source Attachment:
String や List の中身を F3 で見ようとした時に「Source not found」と出たら、設定からソースを紐付けましょう(最近のEclipseならMaven等の設定で自動で落としてくれます)。
• 一流への近道: 「Java標準の書き方」こそが、最も美しく効率的な手本であることが多いです。
まとめ:Javaリーディングの黄金順序
1. パッケージ構成を見る: フォルダ分けから「関心の分離」を理解する。
2. インターフェースを読む: その機能が「何をするものか」の外枠を掴む。
3. JUnit(テストコード)を読む: これが実は一番の近道です。 どう使われるべきか(期待値は何か)が最短で分かります。
Eclipseの機能を使いこなしつつ、「実体(実装)はどこか?」を常に意識する
部分的にデバッグして理解する
1. JUnit(単体テスト)の「テストメソッド単体実行」
これが最も標準的で、かつ「途中から始めて途中で終わる」のに適した方法です。
• やり方:
1. テストしたいメソッドを含むテストクラスを作成します。
2. @Test アノテーションをつけたメソッド内で、テストしたい処理の直前の状態(引数やインスタンス)をセットアップします。
3. Eclipseの「アウトライン」ビューやエディタ上で、そのテストメソッド名だけを右クリック > [デバッグ] > [JUnitテスト] を選択します。
• 「途中で終わる」方法:
• JUnitはメソッドが終われば自動的に停止します。
• 確認したい箇所の直後に return; を書くか、単にそこに ブレークポイント を置いて、確認が終わったら実行を強制終了(赤い停止ボタン)すればOKです。
Eclipseの自動生成ウィザードを使えば手早くいける
これが最も「ブートストラップ的」な方法です。
1. 対象を選択:
テストしたいJavaクラス(例:Calculator.java)をパッケージ・エクスプローラーで右クリック。
2. 新規作成:
[新規 (New)] > [JUnit テスト・ケース (JUnit Test Case)] を選択。
3. 設定:
• JUnit Jupiter(JUnit 5)が選択されていることを確認。
• 「セットアップ・メソッドを作成 (@BeforeEach)」などの必要なチェックボックスを入れる。
4. メソッドの選択 (重要):
[次へ (Next)] を押すと、テスト対象クラスにあるメソッド一覧が表示されます。テストしたいメソッドにチェックを入れると、そのメソッド用のスタブ(空のテストメソッド)が自動生成されます。
自動生成する際、ソースコードと同じフォルダにテストを置くと管理が煩雑になります。現場で使われる「ブートストラップ」の構成は以下の通りです。
• src/main/java: 本番コード
• src/test/java: テストコード(パッケージ名は本番と同じにする)
Eclipseのウィザードで「ソース・フォルダー」を src/test/java に指定するだけで、この綺麗な構成に自動配置してくれます。
まずは 右クリック > 新規 > JUnit テスト・ケース から試す
A5SQLメモ (AI記事)
SQLテンプレート(スニペット)の活用 よく使う定型文は登録しておきましょう。
- 設定場所:
- 表示 > 共通オプション > テキストエディタ > テンプレート
- 使い方:
- sfe と打って補完すると SELECT * FROMに展開される、といったショートカットを自作できます。
A5:SQL Mk-2で、SQLファイルや実行結果の保存先を毎回選ぶ手間を省くには、以下の2つの設定を確認・変更するのが一番スムーズ
1. デフォルトの保存先フォルダを固定する
SQLファイルを保存する際の初期フォルダを、特定のプロジェクトフォルダなどに固定できます。
1. メニューの [表示] > [オプション] を開きます。
2. 左側のツリーから [共通] > [パス] を選択します。
3. 「SQLファイルのデフォルトパス」 の項目に、固定したいフォルダのパスを入力(または参照ボタンから選択)します。
4. これで、Ctrl + S(保存)を押した際に、常にそのフォルダが最初に開かれるようになります。
2. ワークスペース(プロジェクト)機能を活用する
「仕事Aの時はAフォルダ、仕事Bの時はBフォルダ」のように切り替えたい場合は、ワークスペースごとに管理するのがスマートです。
1. メニューの [ファイル] > [ワークスペース] > [名前を付けて保存] で、現在の作業状態を保存します。
2. ワークスペースを保存した場所が、その後のファイル保存時のベース(カレントディレクトリ)として優先的に認識されやすくなります。
3. 【おまけ】実行結果(CSV/Excel)の保存先
SQLの実行結果を書き出す際のフォルダを固定したい場合は、以下の設定もチェックしてください。
• [表示] > [オプション] > [結果セット] > [エクスポート]
• ここで「デフォルトの出力先フォルダ」を指定しておくと、データ抽出後の保存作業が爆速になります。
💡 フォルダをすぐに開く裏技
もし、すでに開いているSQLファイルがどこにあるか分からなくなった場合は、SQLエディタのタブを右クリック > [エクスプローラで開く] を選ぶと、そのファイルが保存されているフォルダが一発で開きます。これ、地味に便利ですよ!
■
ポエム
ああ疲れた
■
ポエム
開発に目覚められるかどうかはもしかしたら良いチュートリアルにで会えるかどうかじゃないだろうか
今の自分の力量に合った難易度と短い小さい経験の積み重ねを繰り返していくことで開発作業のイメージが湧いてきて、勉強にみが入っていく感じがしている
勉強だけじゃダメだけど難易度については知識がものを言うから、不勉強すぎる人は必要になる経験の数が膨れ上がっていきすぎる
ちょうど数学の習得課程として、基本的な算数が手でできつつ概念として負数や関数の知識があってより高次な定理なんかを理解して試してみることができるようになるみたいに
手の計算を無数に積み重ねていけば確かに定理まで辿り着ける可能性もあるが、経験だけでは辿り着けない成功を経て価値を実感できることもあるように思う
GCP CloudBuild を使って仕事の開発フローと同じようにビルド&イメージpush&デプロイを自動化した開発環境が欲しい
GCP CloudBuild を使ってScrewdriverのようにビルド&イメージpush&デプロイを自動化した開発環境が欲しい
使いたい
手順はこう
- まず、CloudRunへSpringBootアプリをサンプルでいいから入れる
- それをCloudBuildからデプロイできるようにする
- Github上のソースコードからデプロイできるようにする
- Github上のリポジトリ更新にHooKしてCloudBuildを実行する
1. Cloud Run に Java サービスをデプロイする
https://cloud.google.com/run/docs/quickstarts/build-and-deploy/deploy-java-service?hl=ja
言われたとおりにコード仕込んでるのにdeployコマンドが失敗しちゃう
よくわかんないからmavenに変えたけど、やっぱり無理だなあって
手元で mvn package 実行しただけなら通るんだけど ログからビルドに使ってるコマンド抜いて実行したらやっぱ失敗する
$ ./mvnw clean package --batch-mode -DskipTests -Dhttp.keepAlive=false -f=pom.xml [INFO] Scanning for projects... [INFO] [INFO] -----------------------< com.example:helloworld >----------------------- [INFO] Building helloworld 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:3.2.0:clean (default-clean) @ helloworld --- [INFO] Deleting /home/*******/git/study_cloudbuild/helloworld/target [INFO] [INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ helloworld --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Using 'UTF-8' encoding to copy filtered properties files. [INFO] Copying 1 resource [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ helloworld --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /home/*******/git/study_cloudbuild/helloworld/target/classes [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /home/*******/git/study_cloudbuild/helloworld/src/main/java/com/example/helloworld/HelloworldApplication.java:[3,1] class, interface, or enum expected [INFO] 1 error [INFO] ------------------------------------------------------------- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.869 s [INFO] Finished at: 2023-02-05T13:50:08+09:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project helloworld: Compilation failure [ERROR] /home/*******/git/study_cloudbuild/helloworld/src/main/java/com/example/helloworld/HelloworldApplication.java:[3,1] class, interface, or enum expected [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR] /home/*******/git/study_cloudbuild/helloworld/src/main/java/com/example/helloworld/HelloworldApplication.java:[3,1] class, interface, or enum expected [INFO] 1 error
と思ったらIDE使わずに書いてたからpackage宣言しくってただけだった
直したらうまくいった
Please enter numeric choice or text value (must exactly match list item): 1 To make this the default region, run `gcloud config set run/region asia-east1`. This command is equivalent to running `gcloud builds submit --pack image=[IMAGE] /home/sh3eys/git/study_cloudbuild/helloworld` and `gcloud run deploy helloworld --image [IMAGE]` Allow unauthenticated invocations to [helloworld] (y/N)? y Building using Buildpacks and deploying container to Cloud Run service [helloworld] in project [study-cloudbuild-and-gae] region [asia-east1] ✓ Building and deploying new service... Done. ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/d******************************309c?project=7**************7]. ✓ Creating Revision... Revision deployment finished. Checking container health. ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [helloworld] revision [helloworld-0*****1-b**] has been deployed and is serving 100 percent of traffic. Service URL: https://helloworld-***************e.a.run.app
先が長いがいったんここまで
正直、このコマンドでほとんど望んでることができてる気がするが 環境をコントロールできないのでそこをどうしようか
次はこれをやっていくことでリポジトリへのマージをHookしてCloud BuildからCDしてもらう?
Cloud Build を使用した Cloud Run へのデプロイ https://cloud.google.com/build/docs/deploying-builds/deploy-cloud-run?hl=ja
そうじゃなく普通にDB連携としてこっちをやった方が実りがあるのかもしれない
Cloud runにおけるFirestore利用について https://zenn.dev/straydog/articles/c76bb7d6fb6ec3f46268
中小企業向けの導入について比較検討する
2023/2時点
条件
- SaaS型(サーバ管理者を置く余裕が無い)
- 会社ソフトウェア資産をホスティングできる
- BYODで利用できる
値段
Github
https://github.co.jp/pricing.html
Free = Limit pribate repository featuers
Team = $44/year-1user
Enterprise = $231/year-1user
Gitlab
https://www.gitlab.jp/pricing/
Free = Max 5user
Premium = $228/year-1user
Ultimate = $1188/year-1user
機能
Gitlab有志がつくったこちらがわかりやすい
https://www.gitlab.jp/devops-tools/github-vs-gitlab.html
監査ログが欲しいとなると$4 - $19と月あたりコストの差が大きい
SSOではGithubも月あたり$21ほどかかる
GitlabからGithubへ移行した人の意見
https://blog.sunl.jp/gitlab-to-github/
Gitlabはプロジェクト管理やCICDなどVCS以外の機能が充実していて高い
ちなみにGitBucetとの比較でGitlabのconsがよくみえる
https://www.ossnews.jp/compare/GitLab/GitBucket
GitlabのStarterプランは廃止されている
https://www.creationline.com/lab/40209
BYODについて
SSOを用いて会社用アカウント廃止する手法で実現
https://techblog.zozo.com/entry/github_sso