IT初学者部

プログラミングに関することを中心に、備忘録として残していきます。

git remote add originでURLミスったときの対処法

#はじめに githubリポジトリに作成したブランチをプッシュしようとした際、URLを間違えてgit remote add originを実行してしまいました。

打鍵後に間違えていたことがわかったので正しいURLに修正して再度実施したところ、以下のようなエラーが表示されてしまいました。

fatal: remote origin already exists

Github側のリポジトリを確認してみても、当然追加されていないのですが、該当プロジェクトのブランチをリモートに上げられなくなってしまいました。

ということで調べてみたんですが、すぐ解決したのでここに書いておきます。

対処法

まず、該当プロジェクトのルートディレクトリで以下コマンドを実行してください。

git remote rm origin

これでリモート上のoriginブランチを削除します。再度 git remote add originを実行すると、正しくリモートブランチに追加されます。

おわりに

Tipsタグが多すぎるのでそろそろ整理しようかな。。。

@Entityをつけているにも関わらず、「org.hibernate.AnnotationException: No identifier specified for entity:」的なエラーが表示される

はじめに

JPARepositoryを利用してCRUD処理の作成を確認しているんですが、タイトルのようなエラーが発生する場合に確認した方がいい箇所と対応について残しておきます。

ソースコード

Entityクラス

~~~(省略)

import javax.persistence.Entity;

import lombok.Data;

@Entity
@Data
public class Test {

    public int id;

    public String name;
}

コンパイル後の実行時にこんな感じのエラーが発生し、Springboot アプリケーションの実行ができない状況になります。

Error creating bean with name 'entityManagerFactory' defined in class path resource

確認箇所① @Idがついているかどうか

idのところに@Idをつけ、識別させる必要があります。

下記ファイルのように、idの前に@Idをつけましょう。

import javax.persistence.Entity;
import javax.persistence.Id;

import lombok.Data;

@Entity
@Data
public class Test {

    @Id (ココ!!!)
    public int id;

    public String name;
}

確認箇所② importがあっているかどうか

~~~

import javax.persistence.Entity;

import org.springframework.data.annotation.Id;

import lombok.Data;

@Entity
@Data
public class Test {

    @Id
    public int id;

    public String name;
}

上記パスの場合、@Idをつけていてもエラーとなります。importするのは「import javax.persistence.Id;」なのが正しいので、以下のように変更してあげましょう。import文を直接直してもいいですし、@Idを一回削除してからもう一度書いてもいいです。Eclipseで自動で選択できるので。

import javax.persistence.Entity;
import javax.persistence.Id;

import lombok.Data;

@Entity
@Data
public class Test {

    @Id
    public int id;

    public String name;
}

これでSpringbootアプリケーションとして実行すると問題なく起動できます。

おわりに

JPAの使い方がなんとなくわかってきたこの頃です。JDBCも含め組み合わせて使おうかなと思ってます。できるのかは分かりませんが。

Keychron K8を購入したのでレビューする

はじめに

久々にキーボードを購入したので、それについて簡単にレビューします。

買ったもの

今回購入したのはKeychronというメーカーのK8というモデルです。

Keychron K8ワイヤレスメカニカルキーボード(日本JISレイアウト) – KeychronJP | Mac、Windows、電話用のワイヤレスメカニカルキーボード

実際に購入したのはJIS版になりますが、amazonには英字しか見当たらなかったです。

購入経緯

そもそも私自身はこれまでARCHISSのMaestro 2Sを愛用していました。

hirm159.hatenablog.jp

Maestro2Sに不満があるとか使いづらいといったことは全くありませんでした。ではなぜ?今回このキーボードを購入したのか?という話ですが、これについては私を取り巻く環境が変化したことが遠因となります。

転職してからリモートワークを実施するようになったのですが、リモートワーク用のノートパソコンへキーボードを接続して作業を行いたいという需要が発生してきました。

このため、リモートワーク用PCと私用PCの2つにキーボードを接続して利用したいという欲求と、キーボードは同じものを利用してデスク周りは綺麗なままにしたいという欲求が出てきます。

こんな感じで接続されていくような形にしたいという話ですね。

で、これをやろうと思ったときに、ARCHISSのMaestro2Sには決定的な短所が出てきます。

それは、「有線接続オンリー」という問題です。

正直言ってキーボード、マウスなどの無線接続についてはあまりいいイメージのない私なんですが、複数PCへ接続していくということになると話は変わってきます。

ということで、まずは無線接続機能がついていて複数PCにキーボード接続ができる(切り替えて利用できる)ということを重視して探していきます。

有線接続と無線接続

ということでとりあえず無線接続で複数接続できるキーボードを探したんですが、Bluetooth接続対応のキーボードならだいたい複数接続可能になります。

この中でなぜ?keychronのK8なのかという話なんですが、私自身がかなりのめんどくさがりなこともあるため、無線キーボード特有のある問題を解決したいという欲求が強かったです。

というのは、無線キーボードはたいてい「充電式」か「電池式」であるという点です。

電池式の場合は電池を交換しなければいけないというのが面倒だし、万が一手元に電池がなかったら使えなくなるというのが面倒。充電式は電池ではないですが、充電が必要なのでそれはそれで面倒。ということで、有線接続もできるキーボードだといいなと思ってました。 有線接続、無線接続どちらもできれば問題ない(充電式、電池式の問題も解決できる。)ためです。

つまり求めているものとして、以下のような特徴のあるキーボードを探していました。

  • bluetooth接続で複数のPCに接続し、簡単に入力先を切り替えられる。
  • 充電式ではなく、ケーブルに繋いだまま利用できる
  • 有線接続での利用も可能

この辺から探していくうちに辿り着いたのがこのキーボードになります。

高評価な点

  • リモートワーク用のPCと私用で使うPCのキーボードで分けて運用していたのを一つに統一できるようになったので、デスク周りをきれいにすることができました。
  • macwindowsの切り替えが左横のトグルで可能。bluetoothの接続先切り替えも有線無線切り替えもしやすい。

イマイチな点

  • Maestro 2Sのほうが打鍵感が良い。値段の割にキーボードの質などは安っぽく感じる。
  • なんとなく押しづらい。これは慣れてないだけで気のせいかもしれない。

おわりに

キーボードもマウスも日常使う機会多いのであれば拘るに越したことはありません。デスク周りスッキリさせつつ(複数端末への切り替えを容易にできる)、打鍵感も良い!そんなキーボードあればいいんですがなかなか見当たりませんね。。。

Springbootの「Schema.sql」によるスキーマ生成を利用してみる

はじめに

個人開発ではあまり気にすることはありませんが、複数人の開発作業や大規模開発の際には、開発時に個々人の環境に違いなどが生じないよう、開発環境をきっちり構築させると思います。

今回行いたいのは、Schema.sqlを利用して各個人の開発環境に構築されるDBの定義を共通のものにするための処理です。

そもそも個人開発の場合でもいちいちDB作ったりなんだかんだするのは面倒なので、開発する際には極力労力を減らす、正確性を上げるために自動生成できる箇所は自動生成してしまうというのが正しいと思います。

ということでSprintboot利用時にschema.sqlを利用してテーブルを構築してみましょう。

前準備

application.propertiesに以下のような記述をし、構築先のDBを設定しましょう。

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/(データベースの名前)
spring.datasource.username=(ユーザー名)
spring.datasource.password=(パスワード)

今回はPostgreSQLを利用します。こんな感じで接続先DBを設定します。

schema.sqlの編集

schema.sqlファイルを編集しましょう。

まず、schema.sqlを配置するパスについてです。「src/main/resources」配下に配置してください。

schema,.sqlの編集についてですが、ここに記載したSQLがSpringboot起動時に実行されます。

テーブル定義をしっかり決め、以下のように記述してみましょう。

create table if not exists account( 
    id serial not null
    , username varchar (255) not null
    , password varchar (255) not null
    , mail_address varchar (255) not null
    , first_date timestamp
    , last_date timestamp
    , version int not null
    , primary key(id)
);

アカウント情報を保管するためのテーブルです。定義についてはちゃんと自分で作成しましょう。(これも本当はどこかのフォーマット(エクセルなど)に記載し、そこから取得してschema.sqlを自動生成するような物を作りたいですが。。。今回ははしょります。

create文なのでなんのことはありませんが、 if not exists ~が必要です。これは、Springboot起動ごとに毎回テーブル作成を行おうとしてしまうのですが、存在しない場合のみ作成と条件をつけることで、起動時のSQLエラーを回避できます。

実行してみます

これを作成したところで実行してみましょう。eclipseでSpringbootアプリケーションとして実行します。

ありゃ?

…。

ググってみたところ、いくつかこんな記事を見つけました。

SpringBootでschema.sqlが実行されなかった原因

【Spring Boot】Spring JDBCでschema.sqlを使ったテーブル作成ができない場合の対処 - 未経験35歳から始めるプログラミング

ということなので、application.propertiesに以下の記述を追加して再度実行してみます。

spring.sql.init.mode=always

一応こんな感じでテーブルの作成が確認できればOKです。

また、exists not の文をつけているため、何度起動しても一度しか生成されません。

こんな感じでschema.sqlにCREATE文を追加していくことで開発時にここの環境の共有ができるようになります。

おわりに

日に日に忙しくなりブログ更新頻度が下がってきてしまいました。

Eclipseで新規にワークスペースを作成するのってどうやるんだっけ?

はじめに

これまで個人開発でSpringbootを利用してJavaアプリケーションの開発作業を行っていたのですが、そろそろ次のフェーズに当たるようなことをしたいと思い、そのために一からjavaアプリケーションの開発を行おう!と思いました。

それはそれでいいんですが、今回実際にやり始めたときに「そういえばEclipseのworkspaceって新規で作る場合ってどうするんだっけ。。。?」となったため、備忘録として残しておきます。

前提条件として

JavaプロジェクトについてはSpring Initializrで作成しておきます。

Eclipse自体もインストール済みで基本的な設定は代替されているという想定です。

手順

ランチャー画面のワークスペースファイルのパス指定箇所のところに、新規で作成したフォルダのパスを設定して「起動」を押下します。

パッケージエクスプローラーにこのような形で表示される(新規で作成しているのでプロジェクトなどがワークスペース内に存在しない)ので、ここにインポートしたいプロジェクトをインポートしたり、新規でプロジェクトを作成するなりすると、ワークスペースが保存されます。

おわりに

最近時間があまり取れない。。。

React + TypeScriptで環境変数を設定する

はじめに

開発作業していて久々に詰まったので、それについて簡単に書いていこうと思います。

テーマとしては、Reactプロジェクトで設定した環境変数の内容が正常に取得できない、というものです。

一応原因と解決方法も判明したので、とりあえず色々と書いていこうと思います。

したかったことについて

例えば、開発時と本番環境で向き先になるAPIを変えたい場合、いちいち定数として書いてあるAPIの向き先を直接書き換える…と言うのは非常に面倒ですよね。

それに、直接毎回書き換えるという作業を行うことで間違えて変え忘れて本番環境でエラーになったり、変な処理になってしまうということも十分にありえます。(流石に業務でこうした事態に陥ることは殆どないかと思いますが…)

私が個人的に行っているような開発作業の場合、私しか触らないため一々開発作業時にAPIパスを書き換える…的なことをしていました。が、あまりにもデプロイ時にエラーになったり、そもそもスマートじゃないし、第一ソースコードにそのままAPI書くって、ねえ?ということもあるため、それらを考慮して環境変数に設定すればいいじゃん!となった次第です

まずはしたかったことについて簡単に記載していきます。

~~~(省略)

// ローカル
 const api = "http://localhost:8080";
// 本番
// const api = "https://(production.path)"


 axios.get(api + "init"),then(res)

~~~ (省略)

上記のように、デプロイ時、開発時でAPI向き先を変更するというやり方も良いかと思いますが、これを以下のように変更してみようと思います。

まずはソースコードの方を以下のように書き換えます。

~~~(省略)

 const api = process.env.REACT_APP_BASE_PATH;


 axios.get(api + "init"),then(res)

~~~ (省略)

とりあえずこの形に変更します。次に、2つの環境変数設定ファイルを追加します。

追加箇所は、「プロジェクトのルートディレクトリ配下」です。.gitignoreやREADMEファイルなどと同一のディレクトリ配下に追加してください。

.env.development

REACT_APP_BASE_PATH = "http://localhost:8080"

.env.production

REACT_APP_BASE_PATH = "https://(production.path)"

こんな感じの設定を行うことで、同じ「process.env.REACT_APP_BASE_PATH」を設定していてもそれの向き先を変更できます。

環境変数に設定する際に、「REACT_APP」から始めるように設定してください。こういう設定にしないと環境変数を取得できません。

設定後、npm startコマンドでローカル環境で実行してみましょう。

実行後、向き先が変わっている(ローカル環境の場合はhttp://localhost:8080)に設定されているはずです。

本番環境へのデプロイ時は、developmentやproductionなどの拡張子からどちらを反映するのか自動で判断してくれるので、特にこのままで大丈夫です。

できない場合

これやってていくつかできなかった例があったので、それについて記載していきます。

① 取得されない

.env.development」と記載してください。先頭の「.」がないと反映されません。

②内容が変更されない

一度npm startを中断(CTRL +Cなどで)し、再度npm startを実行してください。

③上記2つを対処してもちゃんと取得されない

.envファイルの記載時は、以下のようにするといいかもしれません。

REACT_APP_BASE_PATH="http://localhost:8080"

=の前後にスペースを明けないことで対処できる?いろいろ試しているうちにこうしたんですが、これが関係ある家はわかりません。ただし、環境変数設定の書き方としてこうした書き方をしているtipsが多く見受けられるので、取れない場合は試してもてもいいかも。

おわりに

angularの場合についてはそのうち書こうと思います。

コマンドプロンプトでDドライブに移動する方法をど忘れした

はじめに

当たり前のようにやっていたことをちょっとの期間でもやらないでいると、いつの間にか忘れてしまいますよね、って話なんですが…

今回は、コマンドプロンプトでDドライブに移動する方法をど忘れしたので書いておきます。

手順

C:\Users\{ユーザー名}>D:

終わり。

C:\Users\{ユーザー名}>cd D/{file}

みたいなことやりまくってたんですが一向にできなかったので、そういえばやり方違ったな…と思い改めて調べました。

いや単純なんだけど忘れることあるんですよねこういうの…