【TODOアプリ】画面の作成 ~ Vue.js 実装編 ~
TODOアプリの画面Iを作成します。Nuxt.jsを使用して、TODOの登録・閲覧・編集・削除操作を実装します。細かい解説は省くのと、最小構成での実装方法をまとめます。
実行環境
- Node.js v14.18.1
- npm 8.1.1
- NuxtJS v2.15.8
- tailwind 4.2.0
実装手順
1. プロジェクトの雛形を作成
以下のコマンドを実行しプロジェクトの雛形を作成
$ npm init nuxt-app simple-todo-nuxt $ cd simple-todo-nuxt $ npm install $ npm run dev # http://localhost:3000 にアクセスして動作確認
2.APIを呼ぶ実装を追加
methods: { async getTasks () { this.tasks = await this.$axios.$get('http://localhost:8080/tasks') }, async createTask () { await this.$axios.$post('http://localhost:8080/tasks', this.form) await this.getTasks() }, async deleteTask (taskId) { await this.$axios.$delete(`http://localhost:8080/tasks/${taskId}`) await this.getTasks() } } }
3. 表示側の実装を追加
<template> <div v-for="task in tasks" :key="task.id"> <div @click="deleteTask(task.id)">Delete task</div> <div> <h2>{{task.title}}</h2> <p>{{task.description}}</p> </div> </div> <form> <div> <label for="title">Title</label> <input id="title" v-model="form.title" type="text"> </div> <div> <label for="description">Description</label> <textarea id="description" v-model="form.description" rows="5"></textarea> </div> <button @click="createTask">TODO追加</button> </form> </template>
** サンプルコードから省略してあります。
ローカル動作確認
1. APIを実行
をクローンしてきて、
$ docker-compose up
2. 画面を実行
$ npm run dev
3. アクセス
http://localhost:3000 にブラウザでアクセスして動作確認
サンプルコード
【jEnv】Javaバージョン切り替え設定
LTSのJava8, 11, 17をインストールし、jEnv使用してバージョン切り替えるようにする
Javaのインストール
$ brew update # Java8のインストール $ brew tap AdoptOpenJDK/openjdk $ brew install adoptopenjdk8 # Java11のインストール $ brew install java11 # Java17のインストール(実行時は17が最新) # brew install java
jEnv インストール (bash)
$ brew update $ brew install jenv $ echo 'eval "$(jenv init -)"' >> ~/.bash_profile $ jenv enable-plugin export # java 8, 11, 17のインストールパスをjenvに設定 $ jenv add $(/usr/libexec/java_home) $ jenv add /usr/local/opt/openjdk@11 $ jenv add /usr/local/opt/openjdk@17 # インストール後の確認 OKになってるはず $ jenv doctor
切り替え方法
$ jenv versions system 1.8 * 11 (set by /Users/oki/.jenv/version) 17 ... $ jenv global 17 $ java -version openjdk version "17" 2021-09-14 OpenJDK Runtime Environment Homebrew (build 17+0) OpenJDK 64-Bit Server VM Homebrew (build 17+0, mixed mode, sharing)
実行環境
- Mac OS mojave 10.14.6
- Homebrew 3.2.17
Reference
【TODOアプリ】【Java】HTTP APIの作成 ~ 実装編 ~
TODOアプリ用APIを作成します。Java + Spring Bootを使用して、MySQLサーバーへ登録・閲覧・編集・削除操作を実装します。細かい解説は省くのと、最小構成での実装方法をまとめます。(細かい解説は、別パートで解説したい、、)
実装手順
1. Spring Initializer からプロジェクトの雛形を作成する
- Spring Boot 2.6.5
- Java 8
* lombok pluginを使用する場合はココをクリック
build.gradleに以下を追記
plugins { id 'org.springframework.boot' version '2.5.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id "io.freefair.lombok" version "6.2.0" <= これを追加 }
Spring Initializerからlombok選択した場合はこの作業をスキップしてください。
2. DB操作のモジュールの作成 (Repository)
データクラスのTaskEntity.java
を作成
@Getter @Setter @ToString @Builder @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "tasks") public class TaskEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String description; }
DB操作クラスのTaskRepository.java
を作成
public interface TaskRepository extends JpaRepository<TaskEntity, Long> { }
3. HTTPルーティング用のモジュール作成 (Controller)
@RestController @AllArgsConstructor @RequestMapping("/tasks") public class TaskController { // 上で作ったDB操作用モジュール private final TaskRepository repository; // 登録用 @PostMapping @ResponseStatus(HttpStatus.CREATED) public TaskEntity createTask(@RequestBody CreateTaskRequest request) { val entity = TaskEntity.builder() .title(request.getTitle()) .description(request.getDescription()) .build(); return repository.save(entity); } // 一覧閲覧用 @GetMapping public List<TaskEntity> getTasks() { return repository.findAll(); } // 閲覧用 @GetMapping("/{id}") public TaskEntity readTask(@PathVariable("id") Long id) { return repository.findById(id) .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Data Not Found")); } // 編集用 @PutMapping("/{id}") public TaskEntity updateTask(@PathVariable("id") Long id, @RequestBody CreateTaskRequest request) { val entity = repository.findById(id) .orElse(TaskEntity.builder() .title(request.getTitle()) .description(request.getDescription()) .build()); return repository.save(entity); } // 削除用 @DeleteMapping("/{id}") public void deleteTask(@PathVariable("id") Long id) { repository.deleteById(id); } }
4. 設定ファイルを作成 (application.yml)
DB用のテーブル定義ファイル src/main/resources/sql/DDL.sql
を作成
CRETATE DATABASE IF NOT EXISTS http_api_db; CREATE TABLE IF NOT EXISTS `http_api_db`.`tasks` ( `id` INT(11) PRIMARY KEY AUTO_INCREMENT, `title` TEXT NOT NULL, `description` TEXT NOT NULL ) ENGINE = InnoDB CHARACTER SET utf8mb4 ;
アプリケーション設定ファイル src/main/resources/application.yml
を作成
server: port: 8080 logging: file: name: "log/main.log" level: com.toyu.simple.http.api: DEBUG spring: datasource: # 使用するMySQLサーバーの設定に合わせてください url: "jdbc:mysql://localhost:3306/http_api_db" username: "root" password: "rootpass" driver-class-name: "com.mysql.cj.jdbc.Driver" sql: init: schema-locations: "classpath:sql"
ローカル環境のMySQL構築方法は、前回の記事をご参考ください。
動作確認 (コマンドライン)
# アプリケーション実行(停止は、Ctrl + c) $ ./gradlew bootRun 結果> ...(省略) 2021-10-24 15:11:03.121 INFO 58815 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2021-10-24 15:11:03.134 INFO 58815 --- [ main] com.toyu.simple.http.api.EntryPoint : Started EntryPoint in 6.267 seconds (JVM running for 6.742) # 登録 $ curl -X POST -H 'Content-Type: application/json' -d '{"title": "テストたいとる", "description": "説明をココに"}' http://localhost:8080/tasks 結果> {"id":2,"title":"テストたいとる","description":"説明をココに"} # 閲覧 $ curl -X GET http://localhost:8080/tasks/1 結果> {"id":1,"title":"テストたいとる","description":"説明をココに" # 編集 curl -X PUT -H 'Content-Type: application/json' -d '{"title": "テストたいとる(編集後)", "description": "説明をココに(編集後)"}' http://localhost:8080/tasks/1 結果> {"id":1,"title":"説明をココに(編集後)","description":"description"} # 削除 $ curl -X DELETE http://localhost:8080/tasks/1
サンプルコード
RabbidMQ 3.8.9 ローカル環境構築
RabbitMQ 3.8.9
Docker を使ったローカル環境構築手順
実行環境
- Mac OS mojave 10.14.6
- Docker Desktop 20.10.5
- Docker Compose 1.28.5
ディレクトリ構成
. ├── docker-compose.yml └── data └── xxx
方法
1. docker-compose.yml ファイルを作成 docker-compose.yml
version: '3' services: rabbitmq: image: rabbitmq:3.8.9-management ports: - '5672:5672' - '15672:15672' volumes: - ./rabbitmq-data:/var/lib/rabbitmq # コンテナ名を明示的に指定する container_name: rabbitmq-container
2. コマンド実行
# 起動 $ docker-compose up # 停止 $ docker-compose down
3. 動作確認
ブラウザから、http://localhost:15672/#/
へアクセス
初期ID: guest
、パスワード: guest
サンプルコード
MySQL Ver 8.0 ローカル環境構築
MySQL Ver 8.0
Docker を使ったローカル環境構築手順
実行環境
- Mac OS mojave 10.14.6
- Docker Desktop 20.10.5
- Docker Compose 1.28.5
ディレクトリ構成
. ├── docker-compose.yml ├── conf │ └── my.cnf ├── data │ └── xxx └── logs ├── mysql-error.log ├── mysql-query.log └── mysql-slow.log
方法
- docker-compose.yml ファイルを作成
docker-compose.yml
version: "3" services: db: image: mysql:8.0 volumes: - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf - ./data:/var/lib/mysql - ./logs:/var/log/mysql environment: - MYSQL_ROOT_PASSWORD=rootpass - TZ=Asia/Tokyo ports: - 3306:3306 # ホストポート:コンテナポート # コンテナ名を明示的に指定する container_name: mysql8-container
- MySQL設定ファイル作成
./conf/my.cnf
# MySQLサーバーへの設定 [mysqld] # 文字コード/照合順序の設定 character-set-server = utf8mb4 collation-server = utf8mb4_bin # タイムゾーンの設定 default-time-zone = SYSTEM log_timestamps = SYSTEM # デフォルト認証プラグインの設定 default-authentication-plugin = mysql_native_password # エラーログの設定 log-error = /var/log/mysql/mysql-error.log # スロークエリログの設定 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 5.0 log_queries_not_using_indexes = 0 # 実行ログの設定 general_log = 1 general_log_file = /var/log/mysql/mysql-query.log # mysqlオプションの設定 [mysql] # 文字コードの設定 default-character-set = utf8mb4 # mysqlクライアントツールの設定 [client] # 文字コードの設定 default-character-set = utf8mb4
- コマンド実行
# 起動 $ docker-compose up # 停止 $ docker-compose down # ログイン $ docker exec -it mysql8-container bash $ mysql -u root -prootpass
サンプルコード
ディレクトリ毎にgitの設定を切り替える方法
会社用と個人用等でディレクトリを分けて、gitconfigを切り替えたい場合
構成例
会社用ディレクトリ構成
~/company_repos ├─ RepositoryA └─ RepositoryB
個人用ディレクトリ構成
~/private_repos ├─ RepositoryC └─ RepositoryD
設定方法
$ mkdir ~/.gitconfig_profiles $ echo -e " [core] \tsshCommand = "ssh -i ~/.ssh/${company用_id_rsa}_id_rsa -F /dev/null" [user] \tname = company_username \temail = company@address.com " > ~/.gitconfig_profiles/company $ echo -e " [core] \tsshCommand = "ssh -i ~/.ssh/${private用_id_rsa}_id_rsa -F /dev/null" [user] \tname = private_username \temail = private@address.com " > ~/.gitconfig_profiles/private $ git config --global -e
[user]
直下に、以下を追加
[includeIf "gitdir:~/company_repos/"] path = ~/.gitconfig_profiles/company [includeIf "gitdir:~/private_repos/"] path = ~/.gitconfig_profiles/private
Note:
記事のガイドライン
1日1記事を目安に書いていきます。
投稿する記事は、書き途中のものも含む。
忙しく書けない場合があると思うので、書き途中で投稿し後日更新するように。
WEBアプリのフロントエンドからバックエンド・インフラ等を中心に技術系の記事を書いていく。
理解のため読んだ本のまとめを書くこともします。著作権等に注意し、要約と自分の感想を交えて書くように。
記事を書くときに残した方が良い情報として
- 実行環境の情報(OSのバージョンなど)
- 使用するツールのバージョン
- 投稿日(はてぶで見れるから書く必要ないかも)
を残すように心がける。
間違えてしまうことも多々あると思うので、記事はその都度更新するように心がける。
おわり