エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

2022/03/07週 気づきと振り返り 無気力感がやべぇ。。。

業務こなしての問題・気づき

開発環境

ネットワークと分断されてるVM環境に接続しているんだが、クッソ面倒くさい。
情報の連携が難しいのと、ネット検索できないのが面倒。
デュアルディスプレイ前提の開発環境だなと思う。

テスト

テスト仕様書作ってるんだが、テストデータ生成が面倒くさい。。。
かんたんにテストデータ作る方法ないだろうか?

新人教育

特に教育ってことはしてないけど、やってることを見守ってて気づいたこと

  • 矩形選択という発想がない
    • 毎回同じ箇所をコピペしてたり、削除してたりしてる。。。
  • 1メソッドに大量に実装する
  • Javaは辛うじて分かるけど、それ以外のことができない
    • web開発の初期開発は厳しい。覚えることが多すぎて、ついてこれてない感じ
    • なるべくバッチの開発をさせたほうがいい。
    • 覚えることが多すぎるのは、脳がパンクする&無力感を覚える→離職の可能性大

個人開発

typescript

「入力ファイルを上書きすることになるため、ファイル 'XXX.js' を書き込めません。」の対応方法

typescriptのコンパイルオプションで、出力先を指定できるのだが、それを指定してないとエラー判定される。
自分のところは、webpackにて出力していたので、挙動的には問題ないのだが、エラーとして判定されるのが癪なので、以下の対応をする。

{
  "compilerOptions": {
    "outDir": "dist"
  }
}

outDirさえあれば、とりあえず回避可能。

参考サイト

Nuxt2 + TypeScriptの環境構築 - 備忘録

Webpack 入門 その3:Babel による ECMAScript のトランスパイル・TypeScript のトランスパイル - Neo's World

その他雑記

Vtuber

最近、Vtuber見出したのだが、普通に面白い。
芸人見るより面白い。
最近の芸人のコント、つまらなすぎるのだが、俺の感性がおかしいのか?

神の試練

最近あったことなんだが、リモート会議中に神の試練(便意)が与えられたのだが、トイレ行っても良かったのだろうか?
立ち位置上、急に話が振られることがあるので、離席できなかったのだが。。。
誰も見てないけど、なんとか威厳は保つことができた。

神の試練、突発的に発生するから、マジで神の試練だわ
クリアできなかったときの罰が重すぎるんだよな。

最近、ミネラルウォーラーを飲むようになったのだが、ものすごい便の出がいい。
食べ物に気をつけていれば、比較的快適に過ごせる。
今までミネラルウォーラーを馬鹿にしてたけど、見直したわ。
コーラとか飲みたくなるけど、ミネラルウォーラー飲んで誤魔化してる。

土日

すごい無気力になるんだけど、ヤバい?
もう、ゲーム以外、何もしたくなくなる。

2022/02/25週 気づきと振り返り 採番のみの変数名に怒り新党

業務こなしての問題・気づき

Java

クラス名が採番しただけのものはやめろぉぉお!

すごい見ずらいんじゃ!ボゲェェェェェェェェェェ!!

間違いたくないのに、ものすごい間違える。
ちゃんと名称をつけるべきだと思うわ。

番号で管理したがるよな、日本人って。
ものすごい見間違えるから辞めたほうがいいと思う。
俺がよく身間違えるのは、7と1、3と8。
単体でなら間違えないんだけど、上が数桁入り組むとよく間違える。

名称をつけてくれないと、ダメだと思うんだよね。
変数名を123みたいにつけないのと一緒。

SVN

部分更新が最悪

svnってさ、フォルダ単位で部分更新できるのがダメだと思った。
別階層のやつを合わせて修正したのだが、人によって、たまに部分更新しているからビルドエラーが出て悩むことがある。

最初っから全体更新かけるしか方法がないようにしておけば、こんな問題は起こさずに済む。
運用回避可能だけど、落とし穴にハマる操作が可能になっているのは、個人的には「それってどうなの?」って思う。

2022/02/07週 気づきと振り返り 脳みそ破壊されそう

業務こなしての問題・気づき

自動化

設計書のメンテ

設計書からコード生成すると、実装が間違っている場合にメンテが面倒になってくる。
もう、面倒クセェから、直接実装変えたいんだが。。。
設計書修正→自動生成→コードメンテの流れになるから、普通に作業するより1工程多いんだよ!
それに、コードメンテが普通に実装直すのと変わらないのだが、自動生成にメリットあるのか?
自動生成のメリット、設計書と実装がほぼ同じになるくらいしかメリットがない。
自動生成するなら、レビューしないとかなら分かるけど、普通の実装と同じ工程をやるから、あんまり意味ないんだよね。。。

自動生成のメリット皆無なはずなんだけど、なんでそんなに希望を見いだせるのだろうか?

変更に対応しにくくなる

自動生成のための情報を細かく指定しなければ行けないせいで、いろんなところに影響が出てくる。
特にライブラリ作ってたりする場合だと、ものすごいインパクトがでかくなる。

遊びがないせいで、変更対応の工数が結構多いような気がする。

管理と開発業務を同時にやる。

結論:無理

管理業務と開発業務を一緒にやるようなタスクが切られて、一緒にやっていたのだが、どんな優秀な人間でも無理だと思う。。。

開発しながらだと、管理面の問題を忘れてしまう。。。
チーム全体に影響あるのは、結構な工数をかけると感じた。
逆に管理面に力を入れると、開発のタスクが遅れるという。。。

心労が耐えないから、任せるならどちらかの業務に集中させた方がいいと感じた。

Java

初学者とってのJava

たぶん、言語的には難しくないと思う。
ただ、実際に開発する場合、必要とされる知識量が膨大だと感じた。
今、新人の面倒を見ているのだが、予想外のことをしてきたり、やたらと悩んでたりして、自分の時間を確保するのがキツイ。。。
Javaとなると、サーバーサイドの開発が多いと思うのだが、それが環境関連の知識と直結しているせいで、知識が深くないと、かなり厳しい。
サーバーサイドって、受けたデータを元にDB操作するだけってのが多いが、それを難しく感じる様子。Java学習しましたって言っても、SQLは知らない、サーバー知識なし、TCP/UDP・HTML知識なしだと結構キツイ。
取っ掛かりの知識がないから、ググるのも難しいのだろうと感じている。
Javaで完結したものを作るなら良いんだけど、それ以外の要素が混じってくると、途端に難しくなる。
Javaで完結といっても、ユニットテストの考え方とかしらないと、思ってたのと違うことしてたりするので、厳しいなぁ。。。と感じる。

外部の研修って言っても、ほぼほぼ役に立たないってことが多いなぁ。。。

何でも準備万全にしてから挑もうとする人がいるけど、トライ・アンド・エラーじゃないと、プログラミング言語の学習は厳しいと思うんだよね。。。
研修だと、問題解決力が養われないから、実際に開発するときに挫折する人が多いのだと思う。
スクール出身の人が、即戦力になれないのは、そこだろうなぁ。。。

なので、やるとしたらバッチからやらせるのがいいと思っている。
ただ、SQLとかファイル操作とか含んでくると複雑なので、SQLのみに絞るとかの方が良い気がする。

Javascript

eclipseJavascriptの開発しているんだけど、他人のソース見ると、やたらとタイポが多い。。。
タイポ多いのは、たぶん、入力補完がないせいだろうな。。。
開発環境起因だとは思うが、昔の人はどうやって開発していたのだろうか?

その他雑記

プログラマーの立ち位置

正直、ソフトウェア開発におけるプログラマーの立ち位置って、低いと思うんだよね。
実際に開発携わっていると、設計重視の傾向が強いが、いざ開発するとなると、プログラマーの重要性が目立ってくる。
ここで言っているプログラマーは、言われたことをやるやつではなく、環境を理解して問題を自己解決できるやつ。
それができないのは、プログラマー未満だと思うんだよね。
それができてない設計者が、日本には多い気がする。

どうにかしてプログラマーの地位を上げたいとは思うけど、プログラミングできる=プログラマーって認識が強すぎて、問題解決力ってのを度外視してるから、地位向上が厳しいのだと思う。

あと、管理者って、偉そうな割に、何も分かってないケースが多分にある。
自分で調べろよって思うことがないわけでもないが、自己研鑽する努力はして欲しいと思う。
そういう姿みてるから、配下メンバーも育たないのでは?って感じている今日このごろ

ヘルプ

誰かの遅れのキャッチアップをしているのだが、正直キツイ。。。
何が正しいのか、実装者に聞いても答えがないのが辛たん。。。
もっと緩やかな現場で仕事したいお。。。
プレッシャーとストレスで、脳みそ破壊されそう

npm-check-updatesでGithubのDependabot alertsに対応する

きっかけ

Githubにてセキュリティアラート(dependency alert)が来てたので、「対応してみっか!」と思い、まずは現時点のバージョンを知りたいのだが、どうしたらいいのか分からなかったので調べた

環境

バージョン: 1.63.2 (system setup)
コミット: 899d46d82c4c95423fb7e10e68eba52050e30ba3
 日付: 2021-12-15T09:40:02.816Z
Electron: 13.5.2
Chromium: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0
OS: Windows_NT x64 10.0.19043

準備

npm-check-updates っていうのを使うと、現時点のバージョンと、最新バージョンを表示してくれるらしいから、下記のコマンドでインストール。
プロジェクトに欲しいというよりは、環境的に欲しい感じだったので、グローバルにインストール。

$ npm install -g npm-check-updates

調査

対象のプロジェクト直下に移動して、$ ncu を叩くだけ。
そうすると、以下のような結果が帰る。

$ ncu
Checking E:\dev\java\GaleWings\src\main\javascript\package.json
[====================] 33/33 100%

 @popperjs/core             ^2.9.3  →   ^2.11.2     
 @types/bootstrap           ^5.1.2  →    ^5.1.9     
 axios                     ^0.21.1  →   ^0.25.0     
 bootstrap                  ^5.1.0  →    ^5.1.3     
 @types/jest               ^27.0.2  →   ^27.4.0     
 @types/react             ^17.0.20  →  ^17.0.39     
 @types/react-dom          ^17.0.9  →  ^17.0.11     
 @webpack-cli/generators    ^2.3.0  →    ^2.4.2
 css-loader                 ^6.2.0  →    ^6.6.0
 html-webpack-plugin        ^5.3.2  →    ^5.5.0
 jest                      ^27.2.5  →   ^27.5.0
 less                       ^4.1.1  →    ^4.1.2
 less-loader               ^10.0.1  →   ^10.2.0
 prettier                   ^2.3.2  →    ^2.5.1
 style-loader               ^3.2.1  →    ^3.3.1
 ts-jest                   ^27.0.5  →   ^27.1.3
 ts-loader                  ^9.2.5  →    ^9.2.6
 ts-node                   ^10.2.1  →   ^10.4.0
 typescript                 ^4.3.5  →    ^4.5.5
 webpack                   ^5.51.1  →   ^5.68.0
 webpack-cli                ^4.8.0  →    ^4.9.2

Run ncu -u to upgrade package.json

利用しているモジュールをアップデート

前述のncuコマンドの最後に出力されていた通り$ ncu -uを実行する。

$ ncu -u
Upgrading E:\dev\java\GaleWings\src\main\javascript\package.json
[====================] 33/33 100%

 @popperjs/core             ^2.9.3  →   ^2.11.2     
 @types/bootstrap           ^5.1.2  →    ^5.1.9
 axios                     ^0.21.1  →   ^0.25.0
 bootstrap                  ^5.1.0  →    ^5.1.3
 @types/jest               ^27.0.2  →   ^27.4.0
 @types/react             ^17.0.20  →  ^17.0.39
 @types/react-dom          ^17.0.9  →  ^17.0.11
 @webpack-cli/generators    ^2.3.0  →    ^2.4.2
 css-loader                 ^6.2.0  →    ^6.6.0
 html-webpack-plugin        ^5.3.2  →    ^5.5.0
 jest                      ^27.2.5  →   ^27.5.0
 less                       ^4.1.1  →    ^4.1.2
 less-loader               ^10.0.1  →   ^10.2.0
 prettier                   ^2.3.2  →    ^2.5.1
 style-loader               ^3.2.1  →    ^3.3.1
 ts-jest                   ^27.0.5  →   ^27.1.3
 ts-loader                  ^9.2.5  →    ^9.2.6
 ts-node                   ^10.2.1  →   ^10.4.0
 typescript                 ^4.3.5  →    ^4.5.5
 webpack                   ^5.51.1  →   ^5.68.0
 webpack-cli                ^4.8.0  →    ^4.9.2

Run npm install to install new versions.

確認

最後は、ちゃんとnpm installして、挙動確認しましょう。
※俺は面倒くさいから、ビルド通ればOKにするけど、皆はガンバってね!

参考サイト

npm のパッケージを最新版に更新する – ラボラジアン

curlコマンドからソース生成できるcurlconverter

きっかけ

curlコマンドでAPI叩くのを試し終えた。
コマンドからプログラミングに落とすのが面倒になったので、いろいろ調べていたら、良さげなツールがあったので、使い方を自分用にメモ

自動生成について

いろいろ自動生成について批判的なことを書いたけど、管理できる狭い範囲内であれば、自動生成には賛成。
特に定型的なものを作る場合は、積極的に利用していいと思っている。
それが、人が管理できない範囲に適用するのはNGだと考えている。
狭い範囲内で使うべきで、複雑なケースが存在する箇所については、絶対にダメ。

curlconverter

Convert curl commands to code

解説

curl コマンドを各種プログラミング言語(JS, Java, Python, Ruby, etc...)に変換してくれる。 curl commandの欄にコマンド貼り付けて、Languageで生成したいプログラミング言語を選べば、生成してくれる。

今回は、JSで使いたかったので、Node.js(fetch) で生成した。
Node.js(request) もあったけど、requestは非推奨っぽいので辞めた。

感想

やることわかってるけど、調べるのが面倒くさかったので利用した。
レスポンスデータを加工して利用するのは実装しなければいけないけど、curlでいろいろやるのをプログラミング化できるのは、楽だと思った。

nodeモジュールを使ったJSファイルをnodeコマンドで実行する方法

きっかけ

node.jsのモジュール使った簡単なAPIバッチを叩くスクリプトを作ったんだけど、どう実行したらいいんだ?ってなって調べた。

すでにプロジェクトがあるやつに対してやったので、package.jsonスクリプトかかない方法で実行できないか探した。

環境

Chromium: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0
OS: Windows_NT x64 10.0.19043

サンプルソース

やったのは、voicevoxのAPIを叩きたいので、いろいろ調べた。

import fetch from 'node-fetch';

const response = await fetch('http://localhost:50021/audio_query?speaker=1', {
  method: 'POST',
  body: 'こんにちは、音声合成の世界へようこそ',
});

console.log('===== response =====');
console.log(response);

const data = await response.json();
console.log('===== response.json =====');
console.log(data);

const response2 = await fetch('http://localhost:50021/synthesis?speaker=1', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: data,
});

console.log('===== response2 =====');
console.log(response2);

実行方法

一番大事なところ

  • mjsファイルとして作成する
    • js→mjsにファイルの拡張子を蛙
  • --experimental-modulesオプションを付けて実行
    • node --experimental-modules {mjsファイル}で実行できる

参考サイト

node.js モジュール(ES Module)のimport/exportにハマる。 - かもメモ

感想

nodeでjsファイルは何でも実行できると思っていた時期があった。
この日から、大丈夫になったはず。

2022/01/17週 気づきと振り返り 俺のメンタルライフは、もうゼロよ。。。

業務こなしての問題・気づき

自動生成のルールを変えてはいけない

自動生成のルールが途中で変わったのだが、それの影響で手戻りが。。。

内部のちょっとしたことなら許容できるんだけど、さすがに生成されるものが大幅に変わるのは、辞めて欲しいわ。。。

提供するなら、すでに作ってしまったクラスも、なんとかして欲しい。。。

自動生成は非効率

自動生成のための規約を守るために、ものすごい工数がかかる。。。
自動生成を適用する場合、限られた領域内にしておかないと、痛い目を見る。

特に汎用的な箇所に自動生成を適用する場合は、注意したほうが良い。
高確率で失敗するから。

日本の企業、なんでも自動化して失敗しているように感じる。
ソースコードの自動生成は、はっきりいって辞めたほうが無難だと思う。
ものすごい定型的な作業なら自動化してもいいけど、ソフトウェア開発全体に自動化は適用できない。
テストの自動化は、いいんだけど、開発全体の自動化は、絶対に無理。

人類には早すぎる。
ソフトウェア開発全体に適用した結果、何の成果も得られませんでしたぁ!になると思うんだよね。。。

限られた領域内で自動生成にとどめておけばいいのに、適用範囲を広げた結果、開発者を苦しめてるだけだと思う。

あと、普通にコード書いたほうが早いと思うんだけど、なんで自動化すると効率化するって考えるんだろうか?
ボタン押したら自動的にやってくれるってのは、やることが絞られているからで、汎用的な作業を要求する箇所は、適用できないと思う。
洗濯機とか炊飯器とかとワケが違うと思うんだよね、ソフトウェア開発は。

そんなものを作るより、レビュー効率化とか、開発手法の発明に時間をかけた方が、メリット大きいと思う。

自動生成のルールを変えはアカン

詳細設計からソースコード生成するのはいいんだけどさ、実装が始まってからルール変えるの、辞めてくれませんかね?
普通に考えて、手戻りが大量に発生するのだが。。。

クラス構成が変わったら、それはもう、1から開発し直せって言っているのと同義なんよ。。。
自動化してても、完全に自動化してるわけじゃないから、その分、工数がいるんだよ。
結局、汎用的な箇所は、人間が対応になるわけで、自動生成でブラックボックス化している箇所についても理解しなきゃいけない。
そうなると、学習コストがかかり、自動化してない場合と比べたら、それが差分として発生するはずなのだが、それがすっぽり考慮から抜けているため、全然効率化できていない。

マジで頭に来るんだけど、この怒り、どこにぶつけりゃいいんだ?

SVNeclipse

eclipseで開発していて、SVNがうまく動作しなくなることが何回もあるのだが、俺が悪い?

SVN使う現場で、eclipse使っていると、何かしら問題を起こすことがあるのだが、経験しているのは俺だけなのか、最近、強く疑問を持つようになった。

SVN知識が足りない?eclipseの知識が足りない?困っちまう、これは誰かのせい?
最近、Adoの「うっせぇわ」に流行遅れでハマってる。
2周くらい遅れてるかな?今の精神状態だと、あの歌詞がほぼ当てはまる。

その他雑記

精神状態

かなり不安定だと個人的に思ってる。
特に、孤独感を強く感じる。
あとは、家族愛や兄弟愛に飢えてるんだろうなと感じる。鬼滅の刃みてると、最終巻付近でボロ泣きしてしまうんだが、そうとうヤバい?
たぶん、今の精神状態だと、NARUTOとかも読んでボロ泣きしてしまいそうな気がする。