エンターテイメント!!

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

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とかも読んでボロ泣きしてしまいそうな気がする。

2022/01/03週 気づきと振り返り マルチベンダーは面倒くさい

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

連絡手段は絞るべき

連絡が来る手段が複数あると、漏れる。。。 チャットベースかと思いきや、メールで連絡がきたり。。。

胃が痛い。。。

マルチベンダーの現場なのだが、課題管理をやっている都合上、ベンダーの板挟みに合うのが辛たん。。。

各ベンダー、責任の押し付け合いに、俺を利用するの、辞めてもらえませんかね。。。?
やり取りしなきゃいけない俺は、小心者だから、やり取りするのが辛いんですぜ?

環境問題

Javaやっていると必ず引っかかる開発環境問題。。。
どの現場いってもさ、開発環境の問題解決が、一番面倒くさい。

一般的なものを使っているならいいんだけど、ベンダー固有のソフトウェア使っているせいで、問題がどこにあるのか、さっぱりわからないんだよね。。。

その他雑記

バッティングセンター

運動不足が顕著になってきたので、バッティングセンターへ。
80球打ったけど、握力がやばい。。。
バットの持ち方が悪いのだろうか?
途中、握力がなくなって、バットが持つのがシンドかった。。。

やたらと詰まることが多かった。
何球かは良いあたりをできたと思う。

久々に東京に雪が積もったな。。。
結構、雪だるま作ってる人がいて、大人でも童心に戻るんだなぁ~と思った。

路面が凍ってるせいで、自転車も怖くて乗れなかった。
買い置きしてたもので食いつないだけど、Uberとか宅配ピザ頼む気にはならなかったなぁ。。。
あの天候で頼むやつ、絶対にサイコパスだと思う。

2021/11/29週 気づきと振り返り 将来ハゲるんだろうなぁ。。。

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

自動生成

生産性向上するとあるが、実際は微妙である。 制約を内包しているので、制約沼にハマる可能性が高い。

管理者は辛いよ。。。

課題管理担当をしているのだが、結構辛い。
外部の人とやり取りしたり、内部に情報展開したりしていると、なかなか自分のタスクが消化できない。

何をどう伝えるかが難しいと感じましたとさ※他人事?

環境構築のミスを見つける方法

俺が知りたい!!

環境構築された人たちのエラー症状を見て、あたりをつけて調べるしかないかなと思う。
環境構築するときは、何をしているか、何のためにしているかを理解してやらないと、後々エラー出た時に事象解決が難しいと感じた。
そういう立場になるのなら、なおさらやる意味と意義を意識してやるべきだと思った。

大方片付けられたけど、解決できない事象にぶつかったときのストレスがパない。。。
将来ハゲるんだろうなぁ~と30代前半で思ってしまうレベル。

お試し実装

実装が本格的に始まる前に、基盤系の人とやり取りして、ライブラリの使い方だったり、処理の実装方法を確認していた。

一度ハマると、抜け出せないのが辛たん。。。

あと、環境への理解が無茶苦茶重要だと思った。
関係ないところを参照して実装していると、沼にハマりやすい。
流用する場合は実績のあるところ以外、信じてはイケないと感じもうした。

手取り足取り教わらなくても、ある程度ヒントさえあれば解決できる能力はあるんだなと分かったが、思ったより自分はできないことが多いんだと感じた。。。
昔だったら、学習意欲が湧いたかも知れないが、今は後ろめたさを感じてしまうんだよね。。。
メンタル的に弱くなってしまった気がする。。。

こういうのって、改善できないものだろうか?

趣味開発での問題・気づき

pdfkit.jsで出力後のファイルを編集する

出力したpdfのタイムスタンプを編集したくて、いろいろ調べた。

調べた結果、end()を呼ぶと、作成したstreamにfinishイベントが発火するので、それをハンドリングして処理すればいいらしい。

例を上げると以下

    doc.end();
    stream.on("finish", callbackFn);

endする前にonでハンドリングしたほうが良いような気もしてきたが、動いてるからいいか。
趣味開発は、ゆるくヤッてかないと、長続きしないだろうというのが持論

最初、同期処理だと思って、end()読んだあとにタイムスタンプイジったら、エラーが出ていて、10分くらい迷った。
jsイジってると、非同期の考え方ができるようになったので、思ったより早く解決できた気がする。

言語特性を知っていると、こういう時に役立つんだなぁ~と感じた。

その他雑記

Advent Callender

なんか、今年は静かだな。。。
なんかあるのか?

いつもと比較すると、記事が無茶苦茶少ない

料理(ピザ編)

生地まで自作で作った。
生地が粘り気が強すぎた気がする。。。
でも、チーズでごまかせるから、意外となんとかなる。

生地づくりをもっと勉強せねば。。。

2021/11/22週 気づきと振り返り 最高の毒味係に俺はなる

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

会議多すぎんよ。。。

課題管理する役割を担当しているのだが、会議が多すぎぃ!
マルチベンダだから、情報共有のために仕方ないと思うが、やりたいことがなかなかできねぇ。。。
話を聞き漏らすわけにもいかないから、内職もできないんだよね。
やろうとしたけど、何か別のことをやろうとすると、話の内容がまったく頭に入ってこなかったから、危険だと思い辞めた。

環境の確認はトライ・アンド・エラー

開発環境の検証をしているのだが、部分的に情報が足りない箇所がある。
おそらくこうだろうなぁ~で進めてうまく行ったので、それほどストレスにはなっていないが、もっと若い頃だったら、ストレスでハゲてたろうな。
だいぶ知見が溜まったと感じているが、俺起因ではないところで検証できてないところが心配。
どっちにしろ、ストレスかかってるな。。。

検証は毒味

開発環境の検証をしているのだが、毒味している気分。。。
問題見つけたら、解決まで動くのが自分だし、サボって問題見つけなかったら、後で言及されるのが自分だと考えると、責任重大だな~と感じてる。
なんか、見逃してないかものすごい心配なんだよね。
あぁ、またハゲそう。。。

趣味開発での問題・気づき

ほとんどしてない。。。
RSSリーダーがある程度使えるようになったから、あんまり機能追加する必要が無いんだよね。
デザイン系はなんとかしたいと思っているけど、早急にやりたいことでは無いんだよね。

フィードバックを、OSS作っている人が大切にしている理由が分かった気がする。
やってると、タスクが作った人では見つけられないんだねって、最近感じる。

その他雑記

料理

ナンを作った

始めてナンを作った。
オーブン無いので、フライパンで焼いて作ったが、少し水が多すぎて生地がベタついてた。
オリーブオイル入れれば良かったかなとも思ったが、焼いてカレーつけて食ったら、美味かった。
カレーのお陰かと思ったが、生地だけ食っても、もっちりしたパンみたいだったので、たぶん、ナン作りは失敗してないと思う。

まだまだ研究の余地はありそう。

麻婆白菜

白菜が安くなってきたので、麻婆豆腐の豆腐を白菜に変えて作った。
意外と味が染みて、飯が進むのが良かったが、個人的には麻婆豆腐の方が好き。

今度は、麻婆春雨作りたい。

OCJP11-gold移行試験

年末が近づいているから、そろそろマジで勉強しないと、目標にしてた年内取得が難しそう。。。
今週末は巣篭もりして勉強かな?

最近、糧を得る以外の目的で外に出てない気がする。。。

睡眠

最近まで、寝れないことが多かったが、電気毛布を使うようになってから、即寝れるようになった気がする。
体温が低かったのが問題だったのだろうか?
なかなか布団から出たくない病が発生するようになった。

俺は布団はなのだが、ベッド派って多いの?
ベッドに憧れた時期もあるが、今は布団派。

【参加報告】JJUG CCC 2021 Fall

リンク

【オンライン】 JJUG CCC 2021 Fall - 日本Javaユーザーグループ/Japan Java User Group | Doorkeeper

セッションまとメモ

変わりゆくAPI連携仕様との付き合い方

  • API連携のメリット
    • 自社開発不要
  • API連携のデメリット

    • 障害影響
    • 仕様変更の影響
    • テストしづらい
    • 同じドメインでもモデルが異なる?
  • APIのメンテナンス時間があると影響受ける

    • CIに使ってたら、failしてしまう
    • 実装とモックを切り替えられるようにし、リードタイムへの影響を少なくする
  • API利用で気をつけること

    • 用語が増える
  • 対策

    • 腐敗防止策を設ける
      • Adapter作って、開発サービスに連携先のサービスの情報(用語)が入らないようにしている

アンカンファレンス

教育&コンテンツ募集

歴史ある言語 => やり方が複数ある => 初学者はそれで混乱する?

自由度が低い=>教えやすい(Angler)
Javaは歴史が長くなってきて、ループ回す際にも選択肢がいくつかあり、それの判断を初学者がするのは、難易度高い。

やりたいことと手段がごっちゃになっている。

感想

やることを決めて、手段を教えるのが教育として良さそう。
手段だけ押し付けるのは、厳しい。それをどう使えばいいか迷いそう。
やりたいことベースだと深堀り必須。じゃないと成長ができない。
やりたいことベースは、フォローの時間が多くなるかも?

内製化/ユーザ企業の採用

エンジニアの上司は、エンジニアじゃないと成長が難しい
開発を外注してると、パートナーガチャになりがち? => 自分たちで推進できないとパートナーガチャになる

技術レベルの大幅な向上は、外部から迎えるしかない?

感想

朝起きたくないのは、朝から行っても何も決まらないからだと思う。 朝行っても、QAの回答なかったり、顧客打ち合わせしても、決定事項が決まってなかったり、早く行くメリットないんだよね。。。
やりたいことがでてくるの、午後からだから、作業がエンジニア以外の人と異なり、残業が多くなってると思う。

リモートワーク・ハイブリッドワーク

オフィス整えても変わらない

1年で気づかなかった問題が、今後出てきそう。
早急にオフィス引き払うは、リスクでかい

意識的に会議するなど、イベント設定が必須
バーチャルオフィス = 集まるメリットがないと難しい

ハイブリッド => 情報格差がでる

感想

満足度上げるなら、サイバーエージェントみたいにするしかないのでは?(男限定)
今は、自宅の方が開発環境がいい。椅子は数万円のやつを使っていて、そんじょそこらの現場の椅子だと、満足できない体になってしまった。

コミュニケーションってワード使われるとイラッとするのは、僕だけ?
人によって捉え方が違うから、こいつ雰囲気でしゃべってんな~って個人的に思ってしまう。

ハイブリッドワークで情報格差がでるってのは、いつの間にか自分以外の人達が仲良くなってて、自分だけ話に取り残されるパターンだね。
学校休んだ時、それが起きやすいが、それがハイブリッドワークだと起こるってことね。
俺は、慣れてるから何も感じないがな!!

Spring Boot採用システムを定期Upgradeするお話

  • Springboot EOL周期 6ヶ月
    • EOLライフサイクルに合わせて取り込みスケジュールを決める
  • テスト自動化しておかないとライフサイクルに合わせられない
    • 副産物として、省力化・影響箇所の特定、システム安定化する。
  • 破壊を受け入れる度量がないと、定期upgradeについていけない
  • 動向をキャッチすることで、今後の方針を先回りで計画できるようにしておく

システムを塩漬けする現場だが、啓蒙活動(セキュリティ面の対応内容を押すなど)すれば通る。

感想

銀行系の現場は、以前居たことがあるが、現状維持の考えは、普通の現場よりも強い。
機能追加以外のことは、大きな力が動かない限り、前進しないと思う。
それでも定期Upgradeが進んでいると聞くと、発表者が大きな力を持っていたか、身近に権力者がいるかのどちらかな気がしてならない。
日本が、根回ししないと前に進まないと言われているのは、銀行系の考え方が深く浸透しているからな気がする。。。

Spring Batch でサブスク1億件のクレカ決済処理

  • Jobリポジトリは使わない選択もできる -> spring batch
  • JPAでは性能がでなかった。JDBC Template使って解決した。
  • spring batch -> chunkを必ず使わなければいけないものではない

感想

クレジットの洗い替えを自動化しているのか。。。 自分も、クレジット系の対応したことあるが、洗い替えは運用まかせだったな。

全体感想

今回は、アンカンファレンスをメインに見ていた。
テーブル席は、ハードル高い。
チャットなら、少し下がるかもだが。
話す議題が決められているなら、入りやすいかもとは思った。

いきなり会話は、ぼっち歴が長い人には辛いんです。。。