20210501のMacに関する記事は6件です。

Controllerの作成(Laravelでウェブアプリを作ろう⑤)

Controller(コントローラー) Controllerは、ユーザーからのリクエストをもとにモデルに処理を依頼したり、レスポンスを返したりと、その名の通りコントロール(制御)に携わる部分です Controllerの作成 Controllerの作成は手動でも行えますが、コマンドで実行したほうが間違いがなく確実です。 Controllerの作成 php artisan make:controller モデル名Controller コマンドを実行すると[app>Http>Controllers]にファイルが生成されます。 単純な全件取得や削除処理など、モデルに処理を依頼するまでもない場合Controllerから直接データベースにアクセスすることが可能です。 その場合、以下のように実装が可能です UserController <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use \App\Models\User; class UserController extends Controller { //全件取得します public function getAll(){ return User::all(); } //1件取得します public function getOne($userId){ return User::find($userId); } //新規に作成します。 public function create(Request $request){ $newUser = new User; $form = $request->all(); $newUser -> fill($form) -> save(); //登録したidを返却します return $newUser->id; } //名前を変更します。処理一緒? public function changeName($userId){ $newUser = new User; $form = $request->all(); $newUser -> fill($form) -> save(); //登録したidを返却します return $newUser->id; } //削除します。 public function delete($userId){ User::delete($userId); } } Routesの作成 routesというのはURIとコントローラー内のメソッドの紐付けのことで、これを行うことにより様々な処理ができるようになります。 上記で作成したように手動でコントローラーの中身を作成することもできれば、Route::resourceのように記述し、簡単に実装することもできます。 ただし、Route::resourceで実装した場合には必要のないURIを作成してしまったり、逆に必要なURIが足りない場合に追加したりすると、何があるのか分かりにくくなることがあります。 さらに同じ更新処理でも苗字だけ更新する処理、名前だけ更新する処理、など処理を分ける際にもresouceの場合には分かりにくくなりがちです。 そのため、少し作業は多くなりますが最初から自動実装の機能を使わずに実装した方が結果的に見やすくなることが多いです。 [routes>api.php]の内容を以下に書き換える api.php Route::group(['middleware' => ['api']], function(){ //users //全件取得します Route::get('users', 'UserController@getAll'); //1件取得 Route::get('users/{userId}', 'UserController@getOne'); //新規作成 Route::post('users/', 'UserController@create'); //名前の更新 Route::put('users/{userId}', 'UserController@changeName'); //削除 Route::delete('users/{userId}', 'UserController@delete'); });
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

マイグレーションの作成(Laravelでウェブアプリを作ろう③)

マイグレーションは、データベースのテーブルに関する情報を設定するファイルで、テーブルごとに作成します。 テーブルにはどんなカラム(フィールド)があって、そのカラムにはどんな情報が付与されるのかを設定します。 マイグレーションファイルの作成 手動でも作成は行えますが、コマンドで実行する方が確実です。 注意点としては、マイグレーションファイルを複数作成した場合、一括実行を行うと実行される順番はファイルを作成した順番になります。 そのため外部キーの設定をする場合に参照するテーブルを先に生成しておかないとエラーになるため注意が必要です。 php artisan make:migration create_テーブル名_table --create=テーブル名 作成されたファイルは[database>migrations]に格納されます。 デフォルトで3つファイルが作成されています。 [public function up()]こちらのメソッドに、テーブルの作成時に行いたい処理を記載します。 記載の仕方は以下のようになります。 2014_10_12_000000_create_users_table.php public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } よく使うカラムのキーやそのほかの情報については以下を参照してください //文字列 $table->string('カラム名', バイト数); //数字 $table->integer('カラム名'); //正の数のみ $table->unsignedInteger('カラム名'); //真偽値 $table->boolean('is_archived') //作成日及び更新日 $table->timestamps(); //インクリメント $table->increments('カラム名'); //nullを許容する(デフォルトではnotnullになっている) $table->型名('カラム名')->nullable(); //デフォルト値の設定 $table->型名('カラム名')->default(値); //プライマリーキー(idをincrementsにした時点で自動的にprimarykeyになっているため基本的には不要) $table->primarykey(['カラム名']); //ユニークキー $table->unique(['カラム名']); //外部キー $table->foreign('参照元のカラム名')->references('参照先のカラム名')->on('参照先のテーブル'); マイグレーションの実行 マイグレーションの実行にはコマンドで実行します ローカル環境でアプリケーションを開いている場合 php artisan migrate docker環境でアプリケーションを開いている場合 docker-compose exec app php artisan migrate テーブルが追加されていれば成功です 補足 詳しくは記載しませんが、MySQL接続の際のコマンドです dockerのコンテナ名の確認 docker ps docker環境でMySQLに接続するコマンド docker exec -it コンテナ名 mysql -u ログインユーザー名 -p
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Migrateの作成(Laravelでウェブアプリを作ろう③)

Migrate(マイグレート) Migrateは、データベースのテーブルに関する情報を設定するファイルで、テーブルごとに作成します。 テーブルにはどんなカラム(フィールド)があって、そのカラムにはどんな情報が付与されるのかを設定します。 Migrateの作成 手動でも作成は行えますが、コマンドで実行する方が確実です。 注意点としては、Migrateを複数作成した場合、一括実行を行うと実行される順番はファイルを作成した順番になります。 そのため外部キーの設定をする場合に参照するテーブルを先に生成しておかないとエラーになるため注意が必要です。 php artisan make:migration create_テーブル名_table --create=テーブル名 作成されたファイルは[database>migrations]に格納されます。 デフォルトで3つファイルが作成されています。 [public function up()]こちらのメソッドに、テーブルの作成時に行いたい処理を記載します。 記載の仕方は以下のようになります。 2014_10_12_000000_create_users_table.php public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } よく使うカラムのキーやそのほかの情報については以下を参照してください //文字列 $table->string('カラム名', バイト数); //数字 $table->integer('カラム名'); //正の数のみ $table->unsignedInteger('カラム名'); //真偽値 $table->boolean('is_archived') //作成日及び更新日 $table->timestamps(); //インクリメント $table->increments('カラム名'); //nullを許容する(デフォルトではnotnullになっている) $table->型名('カラム名')->nullable(); //デフォルト値の設定 $table->型名('カラム名')->default(値); //プライマリーキー(idをincrementsにした時点で自動的にprimarykeyになっているため基本的には不要) $table->primarykey(['カラム名']); //ユニークキー $table->unique(['カラム名']); //外部キー $table->foreign('参照元のカラム名')->references('参照先のカラム名')->on('参照先のテーブル'); Migration(マイグレーション) Migrationにはコマンドで実行します ローカル環境でMigration php artisan migrate docker環境でMigration docker-compose exec app php artisan migrate テーブルが追加されていれば成功です 補足 詳しくは記載しませんが、MySQL接続の際のコマンドです dockerのコンテナ名の確認 docker ps docker環境でMySQLに接続するコマンド docker exec -it コンテナ名 mysql -u ログインユーザー名 -p
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerでコンテナの作成とその接続設定(Laravelでウェブアプリを作ろう②)

データベースを利用するためにはアプリケーションサーバーとデータベースサーバーを接続しなければいけません。データベースの情報を作っているとき(docker-compose.yml)に接続情報(.env)についても記載してしまいます。 データベースを作成 Docker上にservice名をdbという名前で作成し、test_dbデータベースを作成、test_userというユーザーをpasswordというパスワードで作成してください。 docker-compose.yml version: '3' services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test_db MYSQL_USER: test_user MYSQL_PASSWORD: password TZ: 'Asia/Tokyo' volumes: - ./docker/db/sql:/docker-entrypoint-initdb.d ports: - 3306:3306 versiondocker-composeのバージョン services立ち上げるコンテナのホスト名 image使うイメージの種類(:バージョン) environtmen環境変数- MYSQL_ROOT_PASSWORD:ルートアカウントのパスワード- MYSQL_DATABASE:データベース名- MYSQL_USER:作成するユーザー名- MYSQL_PASSWORD:上記のユーザーのパスワード- TZ:タイムゾーン volumes初期化するボリュームのパス ports使用するポート(3306が多い) 接続設定 dockerに接続するための情報を記載する (基本的にはdocker-compose.ymlに記載してある内容をコピーする) .env DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=test DB_USERNAME=test_user DB_PASSWORD=password DB_CONNECTIONdocker-compose.ymlで立ち上げるデータベースの種類 DB_HOSTdocker-compose.ymlの[services] DB_PORTdocker-compose.ymlの[ports] DB_DATABASEdocker-compose.ymlの[ports] DB_USERNAMEdocker-compose.ymlの[MYSQL_USER] DB_PASSWORDdocker-compose.ymlの[MYSQL_PASSWORD]
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

とりあえずHeroku + Spring Boot デプロイ

Heroku上にSpring Bootをデプロイしてみた。 自分用メモ。 環境 Mac BigSur 11.1 Eclipse/maven Spring Boot 2.4.5 Java 1.8 Heroku Heroku cliインストール brew tap heroku/brew && brew install heroku git/commit git init git add xxxxxx git commit -m "first commit." heroku app Herokuアプリ作成 ログインを問われるのでHerokuにログイン heroku create <appname> Spring Boot Eclipseにてプロジェクト作成 file構成はこんな感じ Procfile [app-name]は、pom.xml記載の下記部分。[artifactId]-[version].jarになる web: java -Dserver.port=$PORT -jar target/[app-name].jar pom.xml <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> system.properties 使用するruntimeバージョン system.properties java.runtime.version=1.8 pom.xml Webapp Runner をダウンロードするための Maven の設定 Webapp Runner を使用するために必須ではありませんが、アプリケーションでの実行が必要になるため、ビルドツールに自動的に Webapp Runner をダウンロードさせることをお勧めします maven-compiler-pluginは、java実行環境バージョンを合わせるための記載 pom.xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>com.heroku</groupId> <artifactId>webapp-runner</artifactId> <version>9.0.30.0</version> <destFileName>webapp-runner.jar</destFileName> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build> Herokuへデプロイ git push heroku master 既にheroku上にアプリが存在している場合 heroku git:remote --app=<アプリ名> Heroku Postgresql pomに追加 pom.mxl <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> Heroku上でCredential生成 Heroku CLIからDBを操作可能 heroku pg:psql [DB名] --app [アプリ名] Heroku上とローカルでDBを切り替える application.propertiesをローカル用とHeroku用に用意 Procfileにて、"-Dspring.profiles.active=heroku"を指定 web: java -Dspring.profiles.active=heroku -Dserver.port=$PORT -jar target/[アプリ名].jar application.properties # デフォルトlocalに spring.profiles.active=local application-local.properties # for Local Deploy spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:[DBパス] spring.datasource.username=[] spring.datasource.password=[] spring.h2.console.enabled=true application-heroku.properties ## for Heroku Deploy spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp spring.profiles.includeは使えなくなった?? その他メモ 下記エラーが発生が発生した場合 javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Admin,name=SpringApplication Ecpliseで実行の構成で「JMXを使用可能にする」のチェックをオフに。 JMXの仕組みがよくわかってないので改めて追記 Starter Spring Bootの仕組み。 各機能を実現するために必要なライブラリの依存関係が集約されている。 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 上記の例だと、Web関連の依存関係が集約され、以下が組み込まれる。 Spring Boot Spring MVC Tomcat Bean Validation Jackson SLF4J + Logback pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.3</version> <relativePath /> </parent> アプリで使用するSpring Bootのバージョン 上記は各依存ライブラリのバージョンを解決するparentの定義。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ターミナルの言いなりになっていたらMacBookの中身を全て失った話

※かな〜り前の話なので細かいコマンド等は忘れてしまっています。 本編 以前にHerokuを使ってみたくHerokuCLIを入れようとした際にターミナルくんから 「Xcodeのコマンドラインツールが古い!このコマンドでアップデートしてね!」 とアップデートを促されたので言われた通りにコマンドを打つと 「このターミナルは最新です!」 的なことを言われたので、よく読むと 「もしアップデートできなかったらこのコマンドを打ってコマンドラインツールを入れ直して!」 的なことも書かれていて、2つのコマンドを提示されたので(多分アンストとインスト)これまた言われた通りにまずアンストしようと 「sudo rm -r /Library/Developer/CommandLineTools」 と打ったら全てを失いました。 文字通りMacbookに入っていたものが全て消えてSafariやシステム環境設定すらまともに動かなくなりました。 Githubに上げていたプロジェクトは復旧できたのですが、画像などのローカルに置いていただけのものはもちろん全て消えてしまいました... 後日談と原因 後日なぜ消えてしまったのかはわからないまま、その手の分野に詳しい友人と通話しながら回復後の開発環境の再構築を手伝ってもらっていた際に聞いたのは 「sudo rm -r /●Library/Developer/CommandLineTools」 の「●」のところにスペースが入っていたんじゃ無いかというお話(これだと以降のパスは参照されず、ダメらしいですね...) 僕自身としてはターミナルに書かれていたものを直接コピペしただけなので「なぜスペースが???」といった感じなのですが... 最後に 兎にも角にも脳死でしてしまった僕が悪いんです。 ただ、Github等を使ってこまめにバックアップを取る癖がついたのでいい教訓になったと思っています。 なにかする際は全て調べながらやりましょう。 何事も脳死は良くないという話でした。 被害者が増えないことを祈ります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む