Somurie Engineer's Blog

PostgreSQLよく使うキーワードまとめ(作成中)

はじめに 以前はMySQLをよく扱っていたのですが最近PostgreSQLを扱う頻度が高くなってきました。 細かいコマンドがわからずに毎度調べているので使用頻度が高いコマンドをまとめることにしました。 DBのログイン、作り方、PL/pgSQLまで、MySQLと違うコマンドが多い(少し違うのではなく全然違う)ので少しでもPostgreSQLから離れると記憶からすぐに消えてしまうので心が折れました笑 DB操作 PL/pgSQL 前提知識 全体構成 PL/pgSQLの全体構成は以下の通り。基本的には変数の宣言(DECLARE)と処理記述(BEGIN)の後ろに書くだけ。 EXCEPTION範囲を入れ子にしたい時はBEGIN〜ENDを入れ子にすることも可能。 DECLARE 変数の宣言を行う BEGIN 処理を記述する EXCEPTION 例外を記述する END; 処理の終わりを宣言する ファンクション 関数の作成には「CREATE OR REPLACE FUNCTION」を使うと楽(関数が既にあれば上書きする)。 削除だけしたい場合は「DROP FUNCTION」。 作成した関数一覧を表示したい場合は「pg_proc」システムビューを参照。「\df」メタコマンドを使うと情報を絞って表示。 ストアドプロシージャ PostgreSQL11から実装された。ファンクションとの大まかな違いは以下の通り 戻り値がなくなる 呼び出し方がcall proc();のようになる(ファンクションはSELECT func();) トランザクション管理ができる(コミットやロールバック) 変数の扱い 変数の記述方法は以下の通り CREATE OR REPLACE FUNCTION func(integer) RETURN integer AS $$ DECLARE age1 integer; // DECLARE部で宣言。 age integer := 3; という記述でもOK age2 ALIAS FOR $1 // ALIAS FORで第1引数の値を指す変数を宣言 BEGIN age1 := 3; // :=で値を代入 RETURN age1; END; $$ LANGUAGE plplsql; 代入の記述は以下3つが使用可能。DECLARE部で宣言しながら代入することも可能。

2020年1月振り返り

1月の振り返り 税金・簿記関連の作業ばかりしていた。 法人化の検討は時間がかかったが具体的な計算ができた。計算が複雑だし法人と個人事業主とで損金算入できるものが違うことがよくわかった。調べれば調べる程情報が出てきすぎ。 ちなみに、免税事業者と任意継続健康保険の効果が大きいため今年いっぱいは個人事業主とする結論とした。 Reactの開発案件はサーバ側の対応待ち。(リリース予定は1月だったが延期) 12月に引き続きReact-Redux周り機能を実装した。 平日の常駐先でDDD周りの学習、実装の経験を積むことができている。 Achieved 開発 DDD案件の経験(@開発現場) レガシーコードからの脱却を読む→ 読了 EffectiveJavaを読む → 読了 フロントエンド お気に入り画面等、余計な機能を遊びで追加(新しく使った技術・ライブラリ等はなし) ノンデザイナーズ・デザインブックを読む → 急ぎで一通り目を通した 基礎 法人化のタイミング検討(税金・経費・社会保険等の計算) 簿記2級の試験勉強中。半分程度完了(2/23試験) さおだけやはなぜ潰れないのかを読む → 読了 会計の基礎を読む → 読了 Problem 新規 なし 継続中・保留 ビルド・デプロイツールの知識が少ない → React案件で多少解決予定 アーキテクト経験がない(1からシステム構成を検討) → React案件で解決予定 AtCorderで有向グラフが理解できていない AtCorderでDPのパターン経験が不足 解消 なし Try for next month 簿記2級の試験勉強、個人事業主の確定申告をするのがメインになりそう。 Reactアプリは担当分を終えているため相方ペースに併せて引き続き進めようと思う。試験(2/23)が終わったらReactNativeにも触れてみたい。 また、合間時間にDDD関連の学習も進める(読書+平日現場で実践) 新規 なし 継続中(前月中に達成できなかった) 簿記2級の試験勉強(過去問10回分を解く) DDD書籍(IDDDを読み解く本)を読む 複雑な宿予約システムのDDD開発練習 モデリングスキルを高める書籍を読む Done レガシーコードからの脱却を読む EffectiveJavaを読む

2019年振り返り

2019年振り返り フリーランスSEになって1年が過ぎました。 良い状態で勉強し続けることができ、不安から自信へと変化した1年でした。 きりの良いタイミングなので振り返りを書いてみました。 開発現場の当たり前をキャッチアップ フリーランスに転向し、本格的な現場での開発は4年ぶりでした。 4年ぶりにもなると初見のツールやライブラリ、言語が多く、1年間は休日なしで勉強漬けになることを覚悟していました。 (以前の開発がJava6、Spring2.5、Subversion、社内独自のツール多数、というタイムスリップぶり) 最初から未経験のことだらけになるのは危険と思い、経験のあるJavaをベースに案件を探したのは正解で、Java経験で自尊心を保ちつつ(苦笑)、Git、BitBucket、Docker、Vagrant、スクラムといった開発のデファクトスタンダードとなるツール・プラクティスを経験しました。 事前にかなり不安があったものの、1ヶ月もあれば不安はなくなりますね、難しいことをやろうとしなければ全然問題ないです。技術的にもまだまだ通用するようで安心しました。 (迷惑をかけないように一人自宅でGitのmerge練習したりしていたのが懐かしい) ドメイン駆動設計 開発現場の当たり前を引き続き探していると原則やお作法、ベストプラクティスといったモノたちに辿り着きました。デファクトスタンダードといえるような「これだけ学べばOK!」というものはなく、手当り次第に物色。 KISSやYAGNIの法則、デザインパターン、SOLID原則などを色々と学び、最後はドメイン駆動設計に辿り着きました。 エヴァンス本が難しすぎて進まず、まとめブログや関連書籍で荒い知識を身に着けて、ドメイン駆動設計の案件に片足参加させて頂きました。 他者のコードやコードレビューなど、実戦ならではの学びが多く、短い期間でしたが大変勉強になりました。そして何よりも楽しんで参加できたことが良かったです。 この経験があったおかげで、年末からはドメイン駆動設計の現場に移ることになりました。 フロントエンドの開発 過去の開発ではサーバサイドの開発がメインであったため、フロントエンドの開発はjQueryを少しかじった程度のレベル。 ただ、サーバレスを耳にする機会も多く、自分でサービスを展開したい思いもあるため手を付けることにしました。 タイムスリップ期間がかなり長く、HTML5、CSS3、ES6等の基礎からキャッチアップ。 CSSフレームワークではBootStrap、Bulma、Material-UI、JSライブラリではReact、Redux、Vue、TypeScriptなどを扱いました。 小さめの開発に携わったものの、案件規模が大きくなると難易度が高くなるんだろうなと薄々感じますね… 年末の時点で、Reactをベースとしたアプリケーションの開発はできるようになりました。来年はいくつかサービスを作ってみようと思います。 IT基礎スキル 地道だが基礎トレーニングは重要。そして半分は趣味と自己満足だけど、以下に挑戦してみました。 データベーススペシャリスト ネットワークスペシャリスト 競技プログラミング デスペは残念ながら不合格。午後2があと4点だったので来年なんとか受かりたい。 ネスペは無事に合格することができた。 競プロはAtCorderで茶色。緑色まであと一歩。さすがに時間を取ってじっくりやらないとレベルが上がらない。あと、RubyではなくPythonでやっておけば良かったかも。中途半端にRubyができるようになってしまった。 全体的に少なからず力をつけることができたと思います。 その他 腱鞘炎になたり腰を痛めたりと、健康面では反省が多いです。 仕事や勉強に精を出していたものの、あまりにも動かなすぎたと思います。 仕事のスタミナをつけるためにも適度な運動はしよう。 総括 全体的によく頑張り、それなりに成果が出たと思います。 アウトプットが少なかった点は反省。 ITのキャッチアップ時間がかなりかかり、IT以外の勉強に手が及ばなかったので来年はもう少しITの以外も頑張りたい。 2020年に頑張ること ITだけでなく、興味が強いファイナンス・会計、避けて通れない英語を併せて学びます。 資格は自己満足と、商談時にわりと威力を発揮するので引き続きコレクションを増やそうと思います。 IT FEやデプロイツール、AWSといったインフラ関連などを手広く学ぶ。浅く広く DBスペシャリストを取得する ドメイン駆動設計を引き続き学ぶ なんらかのシステムを構築する できれば公開する 株関連が有力 AppStoreに何か出す。ReactNativeを使う(iPhoneを買ったので) ファイナンス・会計 法人化と資産運用・節税のために学ぶ(会計は現場で必要なスキル) 簿記2級を受ける。個人事業主の確定申告、法人化、現場の会計周辺業務で活かせるため FP2級を受ける。5月かな。優先度低 外交員一種。投資のベース知識として取りたい。優先度低 英語 プランはないが気長に実施する 年間予定 大まかな年間予定は以下の通り。1年のうち4ヶ月は机上勉強ですね。(本当はITストラテジストに挑戦したかったが開発時間がなくなるため断念)

2019年12月振り返り

12月の振り返り Reactの開発案件を主に実施した 11月に引き続きReact-Redux周り機能を実装した ※リリース予定は12月から1月延期。 平日の常駐先でDDD周りの学習、実装の経験を積むことができている 個人事業主になって初めての確定申告に向けた作業も平行して進めた Achieved 開発 DDD案件の経験(@開発現場) レガシーコードからの脱却を読む→(6割完) フロントエンド React案件の開発を進めた(最低限リリースできる状態まで完成) IndexedDB(PWA化の一環) TypeScriptハンドブックを読んだ http://js.studio-kingdom.com/typescript/ 基礎 簿記2級の試験勉強を開始した(物流システムや個人事業主の確定申告、法人化に役立つため) Problem 新規 なし 継続中・保留 ビルド・デプロイツールの知識が少ない → React案件で多少解決予定 アーキテクト経験がない(1からシステム構成を検討) → React案件で解決予定 AtCorderで有向グラフが理解できていない AtCorderでDPのパターン経験が不足 解消 Webデザインセンスがない。ノンデザイナー向けのUIライブラリ等を学ぶ → MaterialUIや色合いを自動設定してくれる機能があるため解消とする Try for next month 簿記2級の試験勉強、個人事業主の確定申告と法人化検討をする Reactアプリは担当分を終えているため相方ペースに併せて進める 合間時間にDDD関連の学習も進める(読書+平日現場で実践) 新規 簿記2級の試験勉強 継続中(前月中に達成できなかった) ノンデザイナーズ・デザインブックを読む EffectiveJavaを読む レガシーコードからの脱却を読む DDD書籍(IDDDを読み解く本)を読む 複雑な宿予約システムのDDD開発練習 モデリングスキルを高める書籍を読む Done レガシーソフトウェア改善ガイド(5割完)→すぐ使えそうな内容が多いため中断

2019年11月振り返り

11月の振り返り Reactの開発案件を主に実施した。 ReactはHelloWorld程度の経験。TypeScriptとReduxは未経験であったため学習と実験的な実装及びリファクタリングに多くの時間を割いた。 React-Redux周りのトレンドは抑えることができたと思う。 平日の常駐先でDDD周りの学習に時間を費やすことができるため、その他の時間はフロントエンドの学習を行っている。 12月にリリース予定のため引き続き当案件に時間を割く予定。 Achieved 開発 DDD案件の経験@開発現場 レガシーソフトウェア改善ガイド(5割完) ノンデザイナーズ・デザインブックを読む(2割完) EffectiveJavaを読む(3割完) フロントエンド React+Redux+TypeScriptを使ってシステムのα版が完成 以下、React-Redux周りのスキル・知識を身に着けた Hooks各種機能 Ducksパターン Fluxパターン Saga React-Router Material-UI 基礎 業務知識として物流システムを体系的に学習(業務知識の本) Problem 新規 なし 継続中・保留 ビルド・デプロイツールの知識が少ない → React案件で多少解決予定 アーキテクト経験がない(1からシステム構成を検討) → React案件で解決予定 Webデザインセンスがない。ノンデザイナー向けのUIライブラリ等を学ぶ AtCorderで有向グラフが理解できていない AtCorderでDPのパターン経験が不足 解消 JSのフレームワーク1つも使えない(サーバ側に知識が偏りすぎている) → React案件で解決予定 Try for next month Reactアプリに注力する(丁度良くProblemも解決する) 合間時間にDDD関連の学習も進める(読書+平日現場で実践) 新規 なし 継続中(前月中に達成できなかった) ノンデザイナーズ・デザインブックを読む レガシーコードからの脱却を読む DDD書籍(IDDDを読み解く本)を読む 複雑な宿予約システムのDDD開発練習 モデリングスキルを高める書籍を読む Done ReduxのサンプルWebサイトを作成する(11月以降実施予定)

2019年10月振り返り

10月の振り返り ドメイン駆動設計、ネットワークスペシャリスト(以下ネスペ)の勉強の時間を割いた。 10月よりDDDの案件の現場になり、業務=DDD勉強になった。 10月20日にネスペ試験があったため前半はほぼネスペ勉強、試験後はブログのWordPress脱却作業と、React開発案件の着手をした。 9月のうちにJavaのStreamとジェネリクスを手堅く学習しておいたため業務後に追加学習する必要はあまりなかった。 Achieved 開発 DDD案件の経験(@開発現場) ブログをAmazonEC2からHugo(静的ジェネレーター)に移行 Gradleの仕組みを学習(現場トラブル) EffectiveJavaを読む(3割完) フロントエンド ReduxのHelloWorldを作成した(React開発案件の一環) 基礎 ネスペの教科書午後1と午後2を6年分+α実施した 東京都主催のネットワークセキュリティ状況研修(全3日)に参加した(Ciscoルーターを用いたネットワーク構築、IPsecの構築などを実施) Problem 新規 Webデザインセンスがない。ノンデザイナー向けのUIライブラリ等を学ぶ 継続中 ビルド・デプロイツールの知識が少ない → React案件で多少解決予定 アーキテクト経験がない(1からシステム構成を検討) → React案件で解決予定 JSのフレームワーク1つも使えない(サーバ側に知識が偏りすぎている) → React案件で解決予定 AtCorderで有向グラフが理解できていない AtCorderでDPのパターン経験が不足 解消 なし Try for next month Reactアプリに注力する(丁度良くProblemも解決する) 合間時間にDDD関連の学習も進める 新規 ノンデザイナーズ・デザインブックを読む レガシーコードからの脱却を読む 継続中(前月中に達成できなかった) DDD書籍(IDDDを読み解く本)を読む 複雑な宿予約システムのDDD開発練習 モデリングスキルを高める書籍を読む Done ReduxのサンプルWebサイトを作成する(11月以降実施予定) ネスペ6年分の過去問をこなす

2019年9月振り返り

9月の振り返り ドメイン駆動設計、ネットワークスペシャリスト(以下ネスペ)、SpringBootの勉強に時間を割いた。 8月よりDDD案件のタスクは少なめ。主に休日に実施している。 AtCorderについては時間を少なめにし、大会に隔週参加している状況。 Achived 開発 DDD案件によるDDD経験アップ(今月は長めに時間を取ることができた) DDDの書籍「エヴァンス本」読了 Java11〜12のブログ記事を作成。 SpringBootのコメント付きサンプルシステム構築。DB2連携、SQLログ出力を実装。やりたかったことはとりあえず完了 AtCorder大会に週2で参加。緑色ランクまであと一歩。 JavaのStream、ラムダ式、ジェネリクスの詳細を理解した。JavaGoldの書籍、Streamを使った検索や処理の実装サンプルプログラムを作成した。 フロントエンド ES6の学習。以下をハンズオン(第1部は全て完了。全3部構成) [https://ja.javascript.info/][1] 基礎 ネスペの教科書一通りおさらい ネスペ午後1を5年分実施 ネスペ午後2を1年分実施 Problem 新規 なし 継続中 ビルド・デプロイツールの知識が少ない アーキテクト経験がない(1からシステム構成を検討) JSのフレームワーク1つも使えない(サーバ側に知識が偏りすぎている) AtCorderで有向グラフが理解できていない AtCorderでDPのパターン経験が不足 解消 なし Try for next month 次の案件の復習とネスペ勉強が主になる。 ネスペ試験が10月にあるため学習をする。 新規 ネスペ6年分の過去問をこなす モデリングスキルを高めたい。何か書籍か問題集を探す 継続中(前月中に達成できなかった) DDD書籍(IDDDを読み解く本)を読む 複雑な宿予約システムのDDD開発練習 ReduxのサンプルWebサイトを作成する(11月以降実施予定) [1]: http:// https://ja.javascript.info/

今更ながらJava12の新機能をまとめてみた

背景 今までJava8の案件が主だったのですが、最近Java12の案件にも参画させて頂いています。 ただ、開発している中でJava9以降の機能を使っておらず、使える機能がないかを調べる目的でまとめてみました。 今回使用するサンプルコードは以下に全て置いてあります。 https://github.com/somurieengieer/javaSelfTraining/blob/master/src/sample/java12newFunc/Java12sample.java 追加された機能 switch文の追加(プレビュー版) switch文の新たな使い方が追加されました。右辺として使うことができるようになります。 具体的には以下の通りです。 System.out.println("-- アロー構文 --"); int num = 4; switch(num) { case 1, 2, 3 - System.out.println("複数条件を記述できます"); case 4, 5, 6 - { System.out.println("複数行の処理を書くときには"); System.out.println("ブロックで書きます"); } default - System.out.println("条件に合致しない場合"); } System.out.println("-- switch式 --"); String message = switch (num) { case 1, 2, 3 - "複数条件を記述できます"; case 4, 5, 6 - { System.out.println("ブロックの場合はbreakにより値を返却する"); break "ブロックによる記述もできます"; } default - "条件に合致しない場合"; }; System.out.println(message); String transform()の追加 今まで処理メソッドに対してStringの文字列を引数で渡していた処理に対して、transform()を使うとStringの文字列に対して処理を記述することができます。

今更ながらJava11の新機能をまとめてみた

背景 今までJava8の案件が主だったのですが、最近Java12の案件にも参画させて頂いています。 ただ、開発している中でJava9以降の機能を使っておらず、使える機能がないかを調べる目的でまとめてみました。 今回使用するサンプルコードは以下に全て置いてあります。 https://github.com/somurieengieer/javaSelfTraining/blob/master/src/sample/java11newFunc/Java11sample.java 追加された機能 String isBlankの追加 isEmptyに加えて半角/全角スペースもtrueを返します。 (isEmptyは文字列の長さが0の場合のみtrueを返す) ※注意として、該当の変数がnullの場合はNullPointerExceptionを投げます。nullの場合もtrueを返してほしい場合はStringUtils.isEmpty()を使う必要があります。 String strBlank = ""; String strBlankChar = " "; String strJapaneseBlankChar = " "; // 全角ブランク // isBlankでは""、" "、" "の全てにおいてtrueを返す if (strBlank.isBlank() && strBlankChar.isBlank() && strJapaneseBlankChar.isBlank()) { System.out.println("These are judged as Blank"); } // isEmptyでは""のみtrueを返す if (strBlank.isEmpty()) { System.out.println("These are judged as Empty"); } // isEmptyでは""、" "の場合falseを返す if (!strBlankChar.isEmpty() && !strJapaneseBlankChar.isEmpty()) { System.out.println("These are NOT judged as Blank"); } Collection toArrayの追加 Collection型のクラスにtoArrayメソッドが追加されました。メソッド名の通り配列に変換して値を返します。

2019年8月振り返り

8月の振り返り 7月に続き、DDDの案件は平日夜と休日に継続して実施している。 AtCorderについては先月と状況は変わらず、毎週末の大会だけ参加している状況。 プラスアルファとして、JavaScriptとSpringBootの学習を実施している。 Achived 開発 DDD案件によるDDD経験アップ(今月は長めに時間を取ることができた) DDDの書籍「エヴァンス本」はDDDの実践開発で詰まった箇所を読んでいる。8月は5章を読んだ(3割完) Java9〜12の新規追加機能サンプルを作成。 Java9〜10はブログ記事作成。 SpringBootのサンプルシステム構築。SpringSecurityの実装が完了。 AtCorder大会に週1で参加。緑色ランクまであと一歩。 フロントエンド Vueの主要機能を使ったサンプルWebページを作成 ES6の学習。以下をハンズオン(第1部は8割完。全3部構成)https://ja.javascript.info/ インフラ なし Problem 新規 ビルド・デプロイツールの知識が少ない アーキテクト経験がない(1からシステム構成を検討) JSのフレームワーク1つも使えない(サーバ側に知識が偏りすぎている) 継続中 AtCorderで有向グラフが理解できていない AtCorderでDPのパターン経験が不足 解消 JSの最近のフレームワークであるVueとReactを多少なりとも触って感覚を掴めた Try for next month 次の案件に向けて事前準備を行う必要がある。SpringBootとDDDの学習が主。 ネットワークスペシャリスト試験が10月にあるため学習をする。 新規 SpringBootをゼロから一通りの機能を解説コメント付きで実装する DDD書籍(IDDDを読み解く本)を読む ドメイン駆動設計全体像をまとめる ネスペの解説ブログ記事を書く ネスペの過去問を解く(2週間で1年分解く) 継続中(前月中に達成できなかった) Java11、12の新機能サンプルプログラムのブログを書く JSの学習。以下サイトをハンズオンで進める https://ja.javascript.info/ 複雑な宿予約システムのDDD開発練習 ReduxのサンプルWebサイトを作成する(11月以降実施予定)

フリーランス歴8ヶ月の商談結果まとめ

はじめに 2019年2月にフリーランスになって現在の職場で半年ほど働きました。 10月から別の現場に挑戦しようと思い、いくつかの商談を行ったため気付きをまとめます。 フリーランスになったばかりの方、これからなる方の道標になれば幸いです。 現状のスキルと探した案件 現状のスキル プロフィールにまとめて書いてあります。 探した案件 SpringBootの現場経験が欲しかったため、SpringBoot案件を探しました。 プラスアルファとして、ドメイン駆動設計・FEフレームワーク(ReactかVueかAngular)、AWSが経験できると尚良の条件です。 案件の業界はバラバラですね。コンサル、金融、物流と、特に枠を設けずに探しました。 商談の反応 フリーランスデビュー時の商談では経験がないことがかなり不評だったのですが、今回の商談はガラッと変わって好印象な反応が多かったです。 前回は5案件の商談を行い2社からオファーを頂いていたのですが、今回は4案件の商談を行い4社共オファーを頂けました。(こんなに良い結果になるなら4社も受けなくて良かった・・・エージェントの方すみませんでした・・・) 評価された点 色々と評価された点はありましたが以下が主です。 モチベーション 通常の案件(平日の昼間の案件)だけでなく、空き時間にももう1つ案件を持っていたり、勉強に時間を費やしているエピソードはかなり反応が良かったです。趣味=仕事になっているので本音で話せるのは良いですね。 競技プログラミング まだスコアは高くないですが、趣味として競技プログラミングをやっている点も良い反応を頂けました。 関数型の書き方は問題なくできるかという質問に対してRubyで競技プログラミングやっているので問題ないという回答をして納得して頂けたようで良かったです。 少なくともやってない人より良いアルゴリズムを書けるようには見えますし、実際に競技プログラミングを初めてから仕事で書くアルゴリズムの質は良くなっています。空き時間にすぐできますし、趣味としておすすめです。 DBスペシャリスト SQLが書けるかという話になり、DBスペシャリストにギリギリ落ちた話をしたら反応が良かったです。(落ちたんですけどね・・・) 評価されなかった点 ビルド・デプロイ関連ツールの経験 ビルドツールやデプロイ関連の経験がないことは不評でした。案件で途中から入ると大体できあがっているんですよね・・・。個人活動としてでも良いのでゼロから作る経験は必須だなと思いました。 具体的にはGradle、CircleCI、Ansible、Chef(最近聞かないけど)などのキーワードが挙がりました。 アーキテクト経験 ゼロからの全体設計、インフラも含めた構成の検討の経験がないことは指摘されました。 新規構築案件でのみ指摘を受けています。 AWS未経験 AWS案件は多いですね。多少触っているだけでは評価されないなという印象です。 受けた質問 こんな質問されるんだという質問が多々あり、回答にやや困ったものもあったので備忘として残しておきます。 Java12の機能を使っていますか? SQLは複雑なものも書けますか? NoSQLの経験はありますか? ストレスはどういった時に感じますか? エンジニアとしてのキャッチアップの状況はどうか 今後に向けて 一旦商談はクローズしましたが、次回商談に向けて色々と課題が挙がりました。 今回受けた指摘を次回商談で受けなくするという目標に向けていくつかタスクを挙げました。次回いつになるかわかりませんが半年〜1年を目処に以下をこなしていきます。 ゼロからのシステム構築は必須。小さい案件でも良いので機会を探して試す ビルド・デプロイツール設定 development環境、production環境の分離設定 FEフレームワーク経験(多数は無理かと思うのでReactだけ試す) Java以外のサーバサイド言語経験の充足

今更ながらJava10の新機能をまとめてみた

背景 今までJava8の案件が主だったのですが、最近Java12の案件にも参画させて頂いています。 ただ、開発している中でJava9以降の機能を使っておらず、使える機能がないかを調べる目的でまとめてみました。 今回使用するサンプルコードは以下に全て置いてあります。 https://github.com/somurieengieer/javaSelfTraining/blob/master/src/sample/java10newFunc/Java10sample.java 追加された機能 var型の追加 新しい型としてvar型が追加されました。型推論という機能を使って、コンパイル時に右辺の値から型を決定することができます。 略式記述(シンタックスシュガー)です。 var list = new ArrayList<String(); // listはArrayList<String型になる list.add("aaa"); list.add("bbb"); list.stream().forEach(System.out::println); // ローカル変数にのみ使用可能。インスタンス変数は不可 // ラムダ引数には使えないので注意 var i = 10; var s = "aiueo"; // プリミティブ型にも使える List copyOfメソッドの追加 Listを複製する。複製したListは修正不可(追加・削除不可)だが、各要素が参照しているオブジェクト内は修正可能であるため注意。 class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } }; var list = new ArrayList<Person(); list.add(new Person("personA", 1)); var list2 = List.copyOf(list); list2.stream().forEach(System.out::println); // コピー元のListが参照している先のオブジェクトを変更するとコピー元も変更される list.

今更ながらJava9の新機能をまとめてみた

背景 今までJava8の案件が主だったのですが、最近Java12の案件にも参画させて頂いています。 ただ、開発している中でJava9以降の機能を使っておらず、使える機能がないかを調べる目的でまとめてみました。 今回使用するサンプルコードは以下に全て置いてあります。 https://github.com/somurieengieer/javaSelfTraining/blob/master/src/sample/java9newFunc/Java9sample.java 追加された機能 BigInteger sqrt()の追加 BigIntegerで平方根取得のメソッドが追加されました。四捨五入するようで、√2は1を返します。 BigInteger bi1 = new BigInteger("9"); System.out.println(bi1.sqrt()); BigInteger bi2 = new BigInteger("2"); System.out.println(bi2.sqrt()); // sqrt()の返り値はBigIntegerのため、四捨五入されて1が返却される Optional、Stream ifPresentOrElse()の追加 Java8で追加されたOptional、Streamですが、Java9以降にいくつかメソッドが追加されているようです。Java8が展開された後に不足していた機能を充足するメソッド追加のようです。 ifPresentOrElse()ではOptionalの値が存在する場合としない場合の処理をまとめて記載することができます。 Optional<String opt1 = Optional.ofNullable("hoge"); opt1.ifPresentOrElse( s - System.out.println(s + " is exist"), () - System.out.println("not exist") ); Optional<String opt2 = Optional.ofNullable(null); opt2.ifPresentOrElse( s - System.out.println(s + " is exist"), () - System.out.println("not exist") ); streamNullFilter()の追加 Optionalのstream処理をする際に、値がnullの項目を排除することができます。 List<String searchList = new ArrayList<(){ { add("

プログラムステップ数カウンタでシステム規模を確認する

背景 関わっている案件のシステムの規模や全体感を見るために拡張子別のステップ数を算出するプログラムを作成した。 指定ディレクトリ内の全ファイルに対して拡張子別に行数を算出し、全体に対して占める割合も合わせて表示する。 プログラム GitHub

MySQLの定期バックアップ

背景 MySQLを定期的にバックアップするためのシェルを毎回忘れるため備忘用にメモしておく。 cronやサーバ起動時のシェルに組み込んで使用する。 プログラム #!/bin/bash ntpdate ntp.nict.jp today=$(date "+%Y%m%d") mysqldump -u root -ppassword -h localhost dbname /vagrant/outputdirt/mysqlBackup${today}.dump