かすたあどくりいむ定食

子供のウンチ交換プロフェッショナル業者です。

Ruby経験者がJavaに入門するにためにやったこと

ども、業務でJavaの案件に入ったのですが、Javaが未経験過ぎてチンプンカンプンだったので、最低限度の習得までにやったことをまとめようと思ふ。 RubyからのPHPやlaravelはまだ習得しやすかったのですが、Javaは別もんですね!って思うたです。

自分のプログラミング言語部分のスペック

入門

Java11

Struts2の2.6系

最初の感想

何とか会社のドキュメントに従いeclipseによる環境構築はできたけど、環境構築の時点で意味不明な言葉や意味不明なファイルやら何やらで、マジで意味不明というのが俺の感想です。 試しにリポジトリを覗こうものなら、ディレクトリの構成から意味不明でハイ。頭パッカーン。ですね。 tomcatとかいう猫に笑われながら作業する。。。。

下記の記事が分かりやすいですね。感謝。

Apache Tomcatとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

図解で解説!! Apache、Tomcatってなんなの? #Java - Qiita

Java理解するためにやったこと

Java言語

  • 基本的な文法を学ぶ

まず、何にもかんにもこれをやらないと始まらんでしょう。ということで、書籍で基礎を学びました。(つってもざぁーーっと読んだという感じです)がっつり読み込まなくてもAIに聞けばどうにかなるし、ぐぐればいいし。。。。ぐぬぬ。。。。 下記の本です。しっかり読めば数日。 ここでRuby等の動的型付け言語との書き方の違いとか宣言方法とか何やらを学ぶといったところです。

何かしらプログラミング言語1つ習得されてる方なら、そんなガッツリは読まなくてサラッと流して分からないタイミングでググるのがいいかも。

Struts2について

正直なところStruts2に関してはググっても情報があまりなく苦戦。 基本的なことは下記の記事に書いてるのですが、それでもいきなりだと訳わかめなので、 qiita.com

おススメしたいのはAIを使って自分が習得済みのFWと照らし合わせて何が何の機能にあたるとかを調べる。です。

実際に使った質問

charGPTさんに質問しながら進めました。

※AIはすべて正しいってわけでもないので、参考にするレベルで読む

JavaとStruts2の開発が未経験のRuby on Railsの開発者にStruts2を説明するのは素晴らしいですね。Struts2はJavaベースのウェブアプリケーションフレームワークであり、MVC(Model-View-Controller)アーキテクチャを採用しています。これはRuby on Railsと同様のアーキテクチャですが、技術的な細部は異なります。以下はStruts2の概要です。

MVCアーキテクチャ:
Struts2はMVCアーキテクチャを採用しています。これは、アプリケーションの構造をモデル(データ)、ビュー(表示)、コントローラ(処理)の3つの主要なコンポーネントに分割する方法です。これにより、コードがより構造化され、保守性が向上します。

アクションクラス:
Struts2では、リクエストを処理するためのアクションクラスが使用されます。これは、ユーザーのリクエストを受け取り、ビジネスロジックを実行し、結果を返すクラスです。Ruby on Railsのコントローラに類似しています。

ストラット:
Struts2では、アクションクラスを構成するためのストラット(Struts)と呼ばれるXMLベースの構成ファイルが使用されます。このファイルには、リクエストの処理方法、ビューの場所、フォームデータのマッピングなどが定義されます。

タグライブラリ:
Struts2は、JSP(JavaServer Pages)やFreeMarkerなどのテンプレートエンジンと組み合わせて使用されることが一般的です。Struts2は、ビューを生成するためのタグライブラリを提供しており、フォームの生成、バリデーションエラーの表示などを容易にします。

拡張性:
Struts2は、機能の拡張が比較的容易であり、カスタムのインターセプタや結果タイプを作成して、アプリケーションの要件に合わせることができます。

国際化とローカライゼーション:
Struts2は、多言語サポートやローカライゼーション機能を提供しています。これにより、国際的なアプリケーションを開発する際に便利です。

このように、Struts2はJavaのウェブ開発において広く使用されており、Ruby on Railsの開発者にとっても馴染みやすいフレームワークです。
Struts2のディレクトリ構造や機能をRuby on Railsの対応する機能と比較してみましょう。

ディレクトリ構造:

Struts2:
src/: Javaのソースコードがここに配置されます。主にアクションクラスやビジネスロジックが含まれます。
WebContent/WEB-INF/: Webアプリケーションの設定やJSP、CSS、JavaScriptなどのリソースがここに配置されます。
Ruby on Rails:
app/: Railsアプリケーションの主要なコードがここに配置されます。モデル、ビュー、コントローラなどが含まれます。
config/: アプリケーションの設定ファイルがここに配置されます。データベース設定、ルーティングなどが含まれます。
アクションクラス:

Struts2のアクションクラスは、Ruby on Railsのコントローラに相当します。リクエストを受け取り、適切な処理を実行します。
ビュー:

Struts2では、JSPやFreeMarkerなどのテンプレートエンジンを使用してビューを作成します。これは、Ruby on Railsのビューに相当しますが、ERB(Embedded Ruby)やSlimなどのRubyベースのテンプレートエンジンとは異なります。
設定ファイル:

Struts2では、XMLベースの設定ファイル(ストラット)が使用されます。これには、アクションのマッピング、インターセプタの定義、結果タイプの設定などが含まれます。これは、Ruby on Railsのconfig/routes.rbやconfig/application.rbなどの設定ファイルに類似しています。
タグライブラリ:

Struts2は、ビューを生成するためのタグライブラリを提供します。これは、Ruby on Railsのビューヘルパーに相当しますが、HTMLタグの生成やフォームの操作などを容易にします。
モデル:

Struts2はモデル層を直接提供しません。一般的には、独自のORM(Object-Relational Mapping)ライブラリやデータアクセス層が使用されます。これは、Ruby on RailsのActive Recordパターンに類似していますが、RailsではActive Recordがフレームワークに含まれています。
簡潔に言えば、Struts2とRuby on RailsはどちらもMVCアーキテクチャを採用していますが、各フレームワークの言語や技術スタックの違いから、それぞれの機能やコンポーネントが若干異なります。
  • struts2でいうrailsのモデルにあたるというか代わりに使う機能ってありますか?
Struts2では、モデル層を直接提供するわけではなく、代わりに他のJavaのフレームワークやライブラリを使用してデータアクセスやビジネスロジックを実装します。一般的な選択肢としては、以下のようなものがあります。

JavaのORMライブラリ:
Struts2アプリケーションでデータベースとのやり取りを行うために、JavaのORM(Object-Relational Mapping)ライブラリを使用することが一般的です。代表的なORMライブラリとしては、HibernateやJPA(Java Persistence API)があります。これらのライブラリを使用することで、データベースのテーブルとJavaオブジェクトのマッピングを行い、簡単にデータの操作ができます。

POJO(Plain Old Java Object):
Struts2では、データモデルをシンプルなJavaのオブジェクトとして実装することも一般的です。これらのオブジェクトは、データベースからの情報を保持し、ビジネスロジックを実行するためのメソッドを提供します。ORMライブラリを使用しない場合や、単純なデータ操作の場合によく利用されます。

サービス層:
Struts2アプリケーションでは、ビジネスロジックをサービスとして実装することが一般的です。これらのサービスは、アクションクラスから呼び出され、データの操作や処理を行います。これにより、アプリケーションのビジネスロジックがアクションクラスから分離され、再利用性が向上します。

DIコンテナや依存性注入:
Struts2アプリケーションでは、DI(Dependency Injection)コンテナを使用してサービスやその他のコンポーネントを管理することがあります。これにより、アプリケーションの各コンポーネント間の依存関係を解消し、コードの保守性やテスト容易性を向上させることができます。

これらの手法を組み合わせることで、Struts2アプリケーションでモデル層に相当する機能を実装することができます。
  • struts2でDBを定義するのはどこ?railsでいうmigrationみたいなのはない?
Struts2では、データベースの定義やマイグレーションのための特別な仕組みは提供されていません。データベースの定義は通常、JavaのORM(Object-Relational Mapping)ライブラリや直接的なSQL文を使用して行います。

具体的には、以下のような方法でデータベースの定義を行うことができます。

ORMライブラリを使用する:
Struts2アプリケーションでよく使用されるORMライブラリには、HibernateやJPA(Java Persistence API)があります。これらのライブラリを使用すると、JavaのクラスとデータベースのテーブルをマッピングするアノテーションやXML設定を使用して、データベースの定義を行うことができます。また、ORMライブラリは、データベースのスキーマを自動的に生成する機能を提供する場合もあります。

直接的なSQL文を使用する:
必要に応じて、Struts2アプリケーションで直接SQL文を使用してデータベースの定義を行うことも可能です。これは、特定のORMライブラリを使用せずに、データベースとの接続や操作を行う場合に使用されます。通常は、データベース接続やクエリの実行に関するコードが、データアクセスオブジェクト(DAO)やサービスクラス内に配置されます。

データベース管理ツールを使用する:
データベースの定義やマイグレーションを行う際には、通常はデータベース管理ツールを使用します。これらのツールを使用して、データベースのテーブルの作成、変更、削除などの操作を行います。Struts2アプリケーションで使用するデータベースの管理は、通常はデータベース管理ツールを介して行われます。

要するに、Struts2ではRuby on RailsのMigrationのような直接的なデータベース定義やマイグレーションの仕組みは提供されていませんが、代わりにORMライブラリや直接的なSQL文を使用してデータベースの定義を行います。

こんな感じでAIに答えさせて人間の自分が学習しました。 他にも投げたプロンプトは下記です。

struts2で簡単な1画面のcrud処理を作りたいです。
DBの項目はタイトル、テキストです。
その項目が画面に表示されていてcrudできる仕様です。
実装のやり方を初心者向けに丁寧に教えてください
 先ほどの回答の
DAOの作成:
Struts2アクションの作成:
Struts2の設定:

について詳しく教えてください
     // データベースにアイテムを追加する処理
を具体的に知りたいです
struts2でいうbeanってrailsでいうどの機能にあたる?

beanを使ってDBへの新規登録とかできる?

このような質問で少しづつ理解していきました。

あとポイントとしては、ビューへの表示の流れが、JSP→action→bean→DBとなってる部分を頭に入れながらだとやりやすいかなと思いました。 JSPもなにそれ?みたいになるのでRubyでいうerbファイルのことやなっと思えばいいです。 下記の本もいいです。

一応実務で1つの機能を実装し画面への表示までできました。わーい

flutterの環境構築をintelMac2019でやったメモ

intelMacでのflutter環境構築メモです。

Macスペック

機能要件的には一応ギリいけるか? ダメなら新しいMac買おう。 * 2019年MacbookPro13インチ * 1.4 GHz クアッドコアIntel Core i5 * Intel Iris Plus Graphics 645 1536 MB * 8 GB 2133 MHz LPDDR3

flutterSDKをインストール

docs.flutter.dev

intelMacなのでintel Proccessorをクリック

zipファイルは解凍し、任意の開発フォルダ等に格納しておく

PATHを通す

※PATHの設定は慎重にやった方がいい

自分のMaczshの設定ファイルが.zprofileに記載してた。 .zshrcが一般的らしいけど、、、

##設定ファイルがあるか確認する
$sudo ls ~/

下記の書き方だとPATH追加でなく上書きになってしまいlsとかの基本的なコマンドが打てなくなった。。。。

## PATH通す
$ echo 'export PATH="$PATH:[flutterフォルダが格納されているディレクトリ]/flutter/bin"' >> ~/.zprofile
## 有効化
$ source ~/.zprofile

## 確認
$ which flutter
## 下記が返ってくる
/Users/hogehoge/workspace/flutter/bin/flutter

上記のPATH通すと書いてる部分を下記に修正し実行、またはファイルを直接編集してあげる

echo 'export PATH="/Users/自分のユーザディレクトリ/開発用ディレクトリ/flutter/bin:$PATH"' >> ~/.zprofile

そんでPATHが通ったことを確認してください。 ついでにこれまで打ってたlsやらの基本的なコマンドが使えることも確認。

PATH追加でおかしくなったら

下記を参考にしました。ありがとう、、

環境変数の設定を間違えてほとんどのコマンドが command not found になってしまったときの対処法 #Bash - Qiita

MacでPATHを通すときにVimが使えなくなったときの解決策

AndroidStudioインストール

developer.android.com

こちらでダウンロード。 intelMacなのでそちらを選択する。

ダウンロードしたらアプリケーションフォルダから開いて、

  • Do not import→OK
  • 他はデフォルトなままNextで進めてAcceptしFinishすると色々インストールされる このような画面になる

flutterのプラグインをインストール

flutterをインストールしてRestart IDEをクリックし再起動

Android SDKをクリック

AndroidStudioのProject→More Actions→ SDK Managerをクリック SDK Toolsタブ→ Android SDK Command-line Tools(Latest)にチェック入れ→Apply→確認画面が出るのでOK

インストール完了したらOK

Xcodeのセットアップ

AppStoreからXCodeをインストール(10分くらいかかった) XcodeiOS関連のインストール

cocoapodをインストール(rubyは2.6.1) ※めっちゃハマった。。。 $sudo gem install cocoapods だとエラーになってコケます。

## 下記だとインストールできる
$ sudo gem install -n /usr/local/bin cocoapods

セットアップ

$ pod setup

参考

iOSライブラリ管理ツール「CocoaPods」の使用方法 #Objective-C - Qiita

flutter doctor

実行する

$flutter doctor

##なんかこけてる
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.3, on macOS 14.1 23B74 darwin-x64, locale ja-JP)
[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.2)
[✓] VS Code (version 1.82.0)
[✓] Connected device (2 available)
[✓] Network resources

android-licenses認証がうまくいってないっぽいので、書かれてる通りに実行

##実行
$flutter doctor --android-licenses

##再度実行する
$flutter doctor 

グリーン!! これで環境構築OKとのことです。

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.3, on macOS 14.1 23B74 darwin-x64, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.2)
[✓] VS Code (version 1.82.0)
[✓] Connected device (2 available)
[✓] Network resources

• No issues found!

長かった。

参考

全体の手順については、こちらのサイトに詳しく書かれてました。 

zenn.dev

myappを起動してみる

$flutter create myapp

##こんなログが出ればOK
Creating project myapp...
Resolving dependencies in myapp... (1.3s)
Got dependencies in myapp.
Wrote 129 files.

All done!
You can find general documentation for Flutter at: https://docs.flutter.dev/
Detailed API documentation is available at: https://api.flutter.dev/
If you prefer video documentation, consider: https://www.youtube.com/c/flutterdev

In order to run your application, type:

  $ cd myapp
  $ flutter run

Your application code is in myapp/lib/main.dart.

書かれてるようにcreateされたmyappディレクトリに移動してflutter run実行

$ cd myapp
$ flutter run

##ChromeかMacOSを選択して起動できる

こんな画面が表示される

【スクラッチ言語】で【ブロック崩し】作りを子供に教えるために親が先にチャレンジ

こんばんわ! この前、親子で小学生プログラミングコンテストの動画をYoutubeで観ていて、 これ↓(スポンサーも大企業いっぱいで凄い。。。) techkidsschool.jp

7歳の子供がポケモンやってる場合じゃない!ゲーム作りたい!」と言い出したので、じゃあ何からやればいいのか調べたところ、クラッチ言語でゲーム作りにチャレンジするのが良さそうってことで、

親が先に作ってみることにしました!!

どれくらいの難易度なのかと、7歳でもやれるのか?という疑問があったので自分が先にやりました。

参考にしたサイト

kidsc2.org

実際に作ってみた

環境はChromeのブラウザです。(Mac intel8G) 作業時間30分程度でサクッとできました。 サイトが親切に解説してくれてるので、簡単にできました。 やっぱ動くと感動。

少し躓いたとこ

ボールのサイズを大きくし過ぎるとバウンドの挙動があきらかにおかしくなるので、ボールのサイズは小さめの28x27にしました。

子供は一人でできるのか?

人それぞれですが、まずは親と一緒にやった方がいいです。

一人で自走するために必要な能力

  • 基本的なPCスキル(クリック、ドラッグ等)
  • 漢字、文章の読みとり&理解
  • ローマ字のタイピング 最低でも上記の内容を満たしてないと一人はキツイと思います。 PC与えて「自分でやんな!」ではなく、親子でやってみてください。 ローマ字や漢字をある程度理解した小学5年生くらいなら大丈夫と思います。

JavaのAndroidアプリでhelloworld

zzzzzzzz前回の続きです。

hellhellmymy.hatenablog.com

やっぱchatGPTに全部任せるとどうしてもうまくいかんので、本を買った。偉いぞ!俺。 これを参考に。

基礎&応用力をしっかり育成!Androidアプリ開発の教科書 第3版 Java対応 なんちゃって開発者にならないための実践ハンズオン

下記画面でNewProjectを選択。

EmptyActivityを選択。

※↑のこちら2023年現在EmptyActivityだとres/配下にlayoutディレクトリがないので、Empty View Activityを選ぶ。

アプリの名前を入力し、"Finish"をクリックします。

こんな感じでエディタが開きます。

ADVの作成

AVD(Android Virtual Device)を作ります。 右端にあるDevice Managerクリック→create devise→Pixel6→next→ →API34→next→Enable Device Frameからチェックを外しFinish Device Managerで作製したADVが表示されます。

ADVの起動

Pixel6のADVの▶アイコンをクリック 画面右下にEmulatorが表示されます(Googleスマホ画面)

File(ヘッダメニュ)→Settings→Tools→Emulator→Launch in a tool windowのチェックを外しOK

別タブでエミュレータ画面が出るので、その中で設定アプリを選択し言語を日本語にしてあげる。

上部のPixel6-API34横の▶アイコンでアプリ実行で、エミュレータでアプリ起動のはずが、、、できなかった、、、エラー

 1.  Dependency 'androidx.activity:activity:1.8.2' requires libraries and applications that
      depend on it to compile against version 34 or later of the
      Android APIs.

      :app is currently compiled against android-33.

      Recommended action: Update this project to use a newer compileSdk
      of at least 34, for example 34.

      Note that updating a library or application's compileSdk (which
      allows newer APIs to be used) can be done separately from updating
      targetSdk (which opts the app in to new runtime behavior) and
      minSdk (which determines which devices the app can be installed
      on).

  2.  Dependency 'androidx.activity:activity-ktx:1.8.2' requires libraries and applications that
      depend on it to compile against version 34 or later of the
      Android APIs.

      :app is currently compiled against android-33.

      Recommended action: Update this project to use a newer compileSdk
      of at least 34, for example 34.

      Note that updating a library or application's compileSdk (which
      allows newer APIs to be used) can be done separately from updating
      targetSdk (which opts the app in to new runtime behavior) and
      minSdk (which determines which devices the app can be installed
      on).

  3.  Dependency 'androidx.activity:activity-compose:1.8.2' requires libraries and applications that
      depend on it to compile against version 34 or later of the
      Android APIs.

      :app is currently compiled against android-33.

      Recommended action: Update this project to use a newer compileSdk
      of at least 34, for example 34.

以下chatGPT回答

このエラーは、androidx.activity ライブラリのバージョンが 1.8.2 で、それが依存している Android API のバージョンが現在のプロジェクトの compileSdkVersion よりも新しいものであるために発生しています。エラーメッセージにもある通り、現在の compileSdkVersion が android-33 であり、これを少なくとも 34 以上に更新する必要があります。
--------------
android {
    compileSdkVersion 34
    // 他の設定
}
---------------


プロジェクトを同期してビルドします。Android Studio のメニューから "File" > "Sync Project with Gradle Files" を選択してプロジェクトを同期させ、その後 "Build" > "Rebuild Project" を選択してプロジェクトを再ビルドします。

これで再実行でなんとかhelloworldできたけど、マジ長かった。。。。。

AndroidstudioをWindowsPCに入れたので備忘録

chatGPTにJDK8指定で環境構築したいことを伝えて下記を実行した。

Javaをダウンロード

WindowsPCにJDKをダウンロード今回はjdk-8u201-windows-x64.exeをインストールする 下記URLよりダウンロード(Oracleアカウントがない場合アカウント作ってダウンロード) Java Archive Downloads - Java SE 8

PCインストール時の質問はそのまま次へ次へでインストールする。 コマンドプロンプトで確認。

C:\>java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

AndroidStudioをインストール

Android Studio をインストールする  |  Android Developers 下記URLのandroid-studio-2022.3.1.21-windows.exeをダウンロード(利用規約に同意) Android Studio とアプリツールをダウンロードする - Android デベロッパー  |  Android Developers

Next,Nextで答えてFinishまでやってインストール。Googleにデータは送らないのでdon't sendにチェック

licenceに関しては3つAcceptしてFinish!! ダウンロードが長いので根気強く待つ。

インストール完了

次はアプリ作成編へ

ふとしたこと

妻がこの本を読んでた。 いつもに増してやる気が高そうに見える。 自分もざっくり読ませてもらった。掃除や片付けにおける聖書みたいな立ち位置でAmazonレビュー数も恐ろしいほどある。 なんなら世界的にも有名らしい。「こんまり」で検索をかけりゃ、いくつもの関連書籍がでるくらいだ。 もう、片付け業界の神みたいな存在である。

ただ、ただ、ただ、 これを読んだとて実行しなければ意味がないのだ。 普段から片付けられない、モノを色んなとこに放置。 とにかく定位置に戻すだけでも充分いいと思うのだが。 我が家は今日も汚い(ワイがかたづけながら)

【超完全版】YouTube大全 6ヶ月でチャンネル登録者数を10万人にする方法を読んだ

タイトルにある通り今回はコレを読みました!

【超完全版】YouTube大全 6ヶ月でチャンネル登録者数を10万人にする方法

実はいうと趣味でやってるYoutubeの運営について考えてみて、どうせやるなら登録者増やしたいよね。お金チャリンチャリンしたいよねってことです。笑

感想

ためになる情報が多かった。 マーケター視点でチャンネル開設時点でのターゲット選定やら、設定はこうしろとか、これはやっちゃだめなこと。 主にYoutube内での評価が下がる上がるの仕組みとか、かなりてんこもりでした。分析ツールの使い方。 王手事務所に所属してないのであれば、まず読んでおいて間違いないです。 ここに書かれてることちゃんと実践すれば収益化はできると思います。ただ、かならず全部実践できればですが。。。。