「Golang」を含む日記 RSS

はてなキーワード: Golangとは

2024-01-16

anond:20240116225752

俺逆だわ

勉強兼ねてGolangで書いた複数人で使ってるサイトあるけど、他人に渡す時とか考えるとPythonで書くべきだった

書き直すのめんどくさすぎる

言語で書きたい症候群

pythonで書いて1年くらい運用してるプログラムあるけど、golangとかで書き直したくなる。書き直すべきか

2023-12-27

anond:20231227015122

これ見たけど、そんなにローレベルやりたいならC++で良いじゃんって思った。俺のユースケースだとgolangか。次のガチプログラムgolangで書いてみるか

https://zenn.dev/miyataka/articles/program_langs_go_vs_rust

Rustをやるべきか?

C++, Python, Rubyガチプログラムで使ったことがある。D言語は遠い昔あそびで触った。Golangも遊びのプログラム。Rustはガチと遊びどっちなのか?Pythonコンパイルとか型チェックが無いから、バグ作りやすくて代替が欲しいと思ってる。コンパイル言語いじってるときって、書いたプログラムが一発で通ることが結構あるけど、Pythonとかは何回か実行しないといけない。外部APIかに依存しないプログラムとか、テストコードを書けるほど仕様が安定しているプログラムなら良いんだけど、そのどちらでも無いから、本番環境動作確認してる。これを減らしたい

2023-10-02

anond:20231002155526

否定はしないし勧めもしない。Rustに関してはC++と違って時間解決しそうな気がしてる。Golangはここ数年で随分とライブラリが充実して困ることは減った気がする。

もちろん小規模サービスならRubyPythonの方が圧倒的に楽なのは間違いない。

2023-07-14

RubyからGolang

最近ようやくgolang仕事で使い始めることができた。10年前にphpからrubyに移って以来。

rubyが悪いわけじゃないんだけど傾向の話でruby projectって何世代技術スタック古いんだよね。golangいいわけでもないけどまだまし。

今までありがとうね。そしてさようなら

2023-01-05

anond:20230105030147

あってる

ちょっと作った後」に懲りた人がPHP以外を使ってるし「いやーこれPHPとかだとしんどいわ…」ってなった人がgolangを選んでる

懲りてないししんどくないって人は無理して他の言語を使う必要はない

必要になったらあっちのほうから近づいてくるんでそれを見逃さなければ問題なし

2022-02-07

golangあれが竜飛岬北のはずれと

anond:20220207143758

他はともかくGoGolangが多い気がしなくもない

Dもdlang、D言語だし、検索性の悪い名称つけたら後ろに言語付けられるだけだと思う

anond:20220207145143

Goだと紛らわしいんでGoLangと書かれてることもあるけど、チュートリアル等のドキュメントではGo

2021-12-09

経験からWebエンジニアになって年収1000万円を稼げるようになった話

TLDR

(WEBエンジニアリング)未経験から(院卒新卒カードを使って)Webエンジニアになって(5年で)年収1000万円(の会社員と同等の手取り本業副業合わせて)稼げるようになった話

入社まで

工学部情報系でない)の修士課程で、画像処理機械学習を用いた研究をしていた。

PythonLinuxについては少々経験したが、MVCに関する技術は一切触った事がなかった。

就活して、Web系のC向けの名の知れたサービスを自社開発している企業エンジニアとして入社することになった。

※当時は今より牧歌的自分のような人間入社することができた。今はわからない。

副業を始めるまで

PythonFWを使ったWebサービスの開発を行なっていた。

とはいえ、腰を据えて開発している時間は少なかった。大きい企業既存事業にいると開発とは無関係運用や調整業務がかなりあった。

3年目くらいで副業を始めることにした。

理由もっと技術力をつけたかったというものである

上記の通り業務内で技術力を向上させることがむずかしかったのと、未経験業界に来ているハンデを抱えていたのである

Python以外の言語ほとんど書けなかったのでPythonwebスクレイピング案件を探した。

副業エージェントを経由して探した。

5件ほどお祈りされたが、懲りずに応募し続けてたら採用された。Flaskの案件だった。Flaskは書いたことがなかったが採用された。

当時はその会社Python が書けるエンジニアがいなかったので重宝されたし、仕事も任せてもらっていた。

副業をはじめてから

契約は週15時間だった。その間にCOVIDが来て全てが在宅勤務になり、気付いたら週30時間まで稼働するようになっていた。。

当初の見込み通り基礎体力は身に付いていったと思う。

最初案件を納品したあと、次の案件をもらい、段々仕事の幅が広がっていった。

Linuxサーバを触ったりDBサーバを触ったりphp雰囲気で書いたりDockerfileを書いてECS環境を構築したりなど。

Golang, Rust, k8sなど人気の技術案件は探してもちょうどいいものが見つからないのでチュートリアルをやる以上の勉強はできていない。

稼働が落ち着いてきたので副業を増やすことにした。

ちょうど良さそうな募集があったので応募したところ今度は一回で採用された。

給与も少し上がった。後ほど元の副業給与も上がり、本業給与も少しずつ上がった。

年収いくらなのかよくわからなくなったので、月々の手取り銀行口座から調べて、年収1000万円の会社員手取り比較すると大体同じくらいの金額になっていた。

結局年収1000万稼ぐのは難しいのか

犠牲にしていることといえば可処分時間くらいだと思っているので、TLDR節に書いた内容についてはそんなに無理がなくある程度再現性があるんじゃないかと思っている。

辛さでいえば大学院のほうが辛かった。

可処分時間ということでいえばCOVIDで通勤時間が無くなった影響はそれなりにある。

自分について

技術は人並みには好きである

お金は人並み以上に好きである

・要領は決していい方ではない

要領がいい人なら5年も掛けずもっと早く辿り着くのではないか

今回、特にジョブホッパー的な動きはしていない。各職場案件)に恵まれたこともあるし、器用さが足りないといえばそうだと思う。

エージェント中抜きされるという意見もあるが、自分SNSは長続きしないし、勉強会もあまり肌に合わずほとんど出席することはないのでエージェントを通してしか案件を見つけられていない程度の行動力しかない。

今後について

年収についてはおおむね満足するようになり、人間とは面白いもので段々欲がよく出てくるようになった。

モダン技術は、レガシー技術よりも、おしなべて責任範囲が明確であり、何かあったときリカバーがききやすかったり、謎の負債が含まれリスクも少なく、幾分か安心して開発ができる。枯れた理論は好きだが、新しい技術を先回りして身につけることにも興味が湧いてきた。

xRやブロックチェーンといった、技術未来を作っていくことにも興味が出てくるようになった。

自分能力には期待していないので博士課程に戻る予定はないが、これもまた変わるかもしれない。

2021-11-14

anond:20211114025824

Golang ってそんなに良いかね?確かにPython みたいなフレームワーク不要だけどさ。文字処理とか、ポインターとか、とっつきにくくないかい?

2021-09-22

golangが嫌われる理由

いろいろあるけど、自分観測範囲ではRuby(やそれっぽい言語)が好きな人間ほどgolangを嫌う。

自分Rubyを書かないけど、なんとなく気持ちはわかる。詳細は書かないけど「Rubyを書く上でプログラマ気持ちいいと感じる」要素をgolangはことごとく否定しているから。

Rubyが綺麗に着飾ったキャバ嬢だとしたら、golang出産以降、色気のかけらも無くなった嫁の様なものだ。

その2人に対して、「一緒に飲みに行くならどっちがいい?」と「家族にするならどっちがいい?」を各々勝手に選んだ者同士が言い争いしてるんだろう。

実際のところ、MatzRubyを作るにあたってどれだけ「仕事目的プログラミング言語」というもの意識していたのかはわからないが、golangは完全に「Google自分仕事のために作った言語」という認識なので、キャバ嬢が「お酒接待する専門家」としたら、嫁と対比した例えは、もしかしたら逆になるのかも。

2021-06-27

GoオススメWebフレームワークを聞かれたら」ってタイトルにクソブコメつけたら、こんなクソみたいなコメントつけるはてブのほってんとりにあがってくるzenn嫌い!!って筆者が本題以外の記事もすべて消してしまった。この人の他の記事を求めていた人もいただろうし、なんか申し訳ない。黙ってスルーすべきだった。単純に機能を書くための時間ショートカットしたい人(ライブラリごとに開発者が異なるし切り替える不自由さがある。フレームワークだと一本開発思想が通ってる楽さはあるのよ)や他の言語から入ってくる人もいるのに初心者質問した前提って暗においてること、それに対してウェブフレームワークなんか使わないで自力golang書けるようになろうねって書いてあって、必要機能は全部書けばいいってウエメセ傲慢さがさすがGoogle Developer Expert (Go)って感じに非常に鼻についたことに黙ってられなかったし今もぐちぐちいう自分が幼稚やな。はっはっは。

2021-06-18

Python+Golang+TypeScript+ReactプログラマRails+CoffeeScriptに押し込まれて思った

想像していたよりもRailsは良い。

ちゃごちゃしたモデルがほいほい操作できて、Formもちょちょいと書ける。

テストもモリモリ書ける。

想像していたよりずっと良い。

気持ちがいい。

私ハマっちゃうかも。

でもFormでちょっと動的なことをしたいな、ってだけで、CoffeeScriptと格闘する羽目になってとても苦しい。

CoffeeScriptいから全部サーバに処理させたいけど、そうなると、簡単な動的操作でも画面更新履歴積み積みになってそれはそれで酷い。

というかCoffeeScriptむちゃくちゃ見辛い。地獄。なんだよこのインデント

辛い。

病みそう。

RailsAPIだけやってろって言う人の気持ちがよくわかった。

わかったから早くもとの仕事に帰りたい。

結論CoffeeScriptウンコ

https://anond.hatelabo.jp/20210618001001

2021-05-31

Golangの競合ってRustじゃなくて.NET Coreだよな

なんでC#じゃないの? なんでその、ゴー言語、使うの? ってすごいよく言われる。

2021-01-31

Golang好きだけど

あの日フォーマットが好きだとか言っている人を見ると

鰯の頭も信心から、と思う

2021-01-06

無料プログラミングスクールからブラックSES就職した話

プログラミングスクール話題になっていたので体験談を書いてみた。スクールの中身と就職先がメイン。技術的な話はあまりしてないし長いけどよかったら読んでみて欲しい。細かいところは濁してるよ。


数年前の話。

20代半ばでフリーターをしてたんだけど正社員になるべくプログラミングスクールに通った。そのスクール授業料無料。代わりに斡旋してもらった企業には(法的拘束力はないけど)就職しなきゃいけないというルールだった。

スクールの開校初日はよく覚えてる。簡素な小部屋に同期生30人程が集められた。やたら顔のいい講師自己紹介をしてくれたが、ホント営業職らしい。意味わからん講師から最終月にグループ課題があるので同期生とは今から仲良くしてくださいねと言われ、前後左右に座る男女と自己紹介をした。理由は色々だったけどみんなエンジニアになりたいらしい。1人からは並々ならぬ熱意を感じる。熱血クンと呼ぼう。

突然、講師から質問

「独学でもいいのでプログラミング経験がある人〜?」

挙手したのは自分だけ。あれ?思ってたより少ないな。てか熱血クン手上げてないし。このクラス大丈夫かな?

嫌な予感がしつつも早速授業が始まった。映像授業を見終わったら演習課題を解いて講師に見せるという流れだった。内容はHTMLの基礎。映像があまりに遅くて退屈なので授業内容が要約されたPDF(たぶん復習用)を読んで演習課題を解いた。講師確認してもらう最中ふと横を見ると熱血クンはウトウトしていた。大丈夫だろうか。

授業内容も演習課題もめちゃくちゃ簡単でProgateの方が難しいレベル。進めていると熱血クンが質問してきたので教えてあげる。講師質問したら分からないと言われたらしい。自分講師存在意義が分からないよ。HTMLタグの閉じ忘れを指摘すると熱血クンは大喜び。ホッコリ。

1週間後、熱血クンは来なくなった。


2ヶ月目。何故か同期生がみんな仲良くなっていたが自分は馴染めず挨拶をする程度に留めておいた。毎週飲み会が開かれたが少しでも多く勉強たかったので断っていると、ある日講師から呼び出しをくらう。

増田さん、飲み会行かないんですか?プログラマーにはコミュ力必要ですよ。」

家でアプリ開発したいんですが……。とは言えず飲み会には1度だけ参加した。同期生は概ね人が良く楽しかったが2次会3次会はパスして1時間帰宅

翌日は半分くらいの生徒が遅刻してきた。

課題についていけない5人くらいが来なくなった。


3ヶ月目。グループ課題が始まる。グループ毎にCTOを決めるのだが、この時点で達成してるハズの課題自分以外終わっておらず必然的自分CTOになった。目立ちたくないのに。

課題はよくあるポートフォリオサイトを作るというものだった。要件定義や画面設計などを1人で終わらせチームメンバー役割を割り振るところで問題発生。ある女メンバー責任を負いたがらない。余程自信があるのか常に生脚を露出していたので生脚と呼ぼう。

自分「〇〇ページの作成をお願いできますか」

生脚「よくわかんないからイヤ!(ToT)」

自分「そしたら✕✕機能は……」

生脚「難しそうだから無理!‪٩(×_×)۶‬」

一体何ならしてくれるんだ?話を聞いてみると、どうやらチームメンバーEXILEみたいな男と同じ作業がしたいようだ。こいつはEXILEと呼ぼう。EXILEに生脚は技術的に不安があるから一緒に開発して欲しいと頼んだところ快諾してくれた。ありがとうEXILEイケメンは中身もイケメンなんだなぁ。

そんなこんなで開発が始まった。自分は全体の半分くらいの機能を開発しつつチームメンバーサポートを受け持った。講師が変わり技術的な質問ができるようになったので多くを学べるよう必死に開発した。最終日には成果発表のプレゼンがあり技術的な説明をさせてもらった。

生脚はEXILE告白してフラれたらしい。途中から来なくなった。


開発が終わり、ついに就活フェーズに入った。スクールの用意した就活アドバイザーが色々教えてくれる。面接でよく聞かれる質問とかそういうやつ。どんな企業斡旋されるのか聞いてみたところ開発時の講師が生徒を評価してスクール側で勝手に割り当てるのだそう。なにそれこわい

募集が来てる企業一覧から自薦することもできた。200社くらいか募集があり自社開発は4社。受託が8社。残りの188社はSES社内SEだった。SESは闇深と聞いていたので自社開発と受託をメインで自薦してみたが書類選考で通ったのは3社だけ。正社員経験がないとダメらしい。通った3社とスクールが割り当てた4社の計7社で面接してもらえることになった。この中に自分未来を預けるのか。

自社開発や受託企業面接はどれも厳しいものだった。スクールでは教わらないレベルの内容を問われ、アーキテクチャについて考えを問われ、はたまたOSS開発の経験まで問われた。どうやらスクール自分のことを高く評価してくれたようだが自分には壁が厚すぎた。スクールでのプレゼン経験を糧に伸び代アピールを頑張ったのだが落ちた。全て落ちた。技術不足で申し訳ない。

ところが一方でSES面接は楽勝だった。面接というよりはほとんど雑談レベルで聞かれることといえば出身地趣味大学の専攻、etc.お見合いかよ、なんて突っ込んでる間に全て受かった。人類なら全員受かるのではないだろうか。

どの企業も似たり寄ったりで、結局、面接で唯一「将来なりたいエンジニア像」について聞いてきた企業に決めた。ここならキャリアを積めるかもしれないと思ったからだ。給与が1番高かったのも理由の1つだけど。


タイトルにもあるが、この企業がそれはもうギリギリブラック企業だった。

入社初日はよく覚えてる。とんでもなく小さいビルの1室。インターホンを鳴らすと、なんと社長自ら出迎えてくれた!素晴らしいことのように見えるがSESなので自社に誰も社員がいないのだ。ホントに1人も。

社長から会社について説明を受ける。時折、ここは良いところだぞ!社員家族みたいなもんだ!と挟んでくるがブラック企業常套句をなぜ連呼するのか。そして早速お前呼びされた。

Windowsのクソ重ノートPCを渡されながら社長命令

「俺は今から営業行ってくるから、お前はSlackで指示を仰いで。じゃーね」

ん?社長がいなくなったら社内1人ですよね?電話とか来たらどうします?指示って誰に聞くんですかね?何時に帰ってくるんですか?

聞こうと思った瞬間には電話しながら外行っちゃった。やばい。とりあえずSlackの全体チャンネル入社挨拶と指示くださいと投げる。返事なし。1時間経過したところで返事が来た。多分上司だ。

新人担当が決まってなかったので連絡遅れた。とりあえず俺に聞いて。今日は自社開発してるサービスの開発環境構築しといて。PCに前の人が使ってたメモ入ってると思うから。以上」

えぇー。新人担当くらい決めておいて欲しいです。自社開発のサービスって何ですか聞いてません。あとメモに書いてあるライブラリバージョンが古くて起動できないです。

などなど聞きたいことは山ほどあったが上司も常駐先で忙しいようで返事が最速で30分かかるし、聞く度にバカかアホかと嫌味を言われる。こりゃ自分でなんとかするしかない。

環境構築をしてると電話が鳴る。しょっちゅう鳴る。人材紹介の営業ほとんどだったのでかけ直すと言ってメモだけしておく。1件だけ社長はいますかと聞かれたので名前を頂戴したところ銀座の高級クラブだった。私用電話をするな。

定時になったが鍵を持っていないので帰れない。Slackヘルプを求めるが誰も反応してくれない。結局その日は22時頃に社長が帰ってきた。営業という名目飲み会だったようでベロンベロンに酔っていた。「鍵渡すの忘れてたわ〜」だって。早めの退職を心に決める。


どうやらSESとして派遣されるのは1ヶ月程後のようで、それまでは自社開発をするらしい。実務で経験を積めるならラッキーと思ったが、この自社開発サービスがクセ者で大変苦しむ。

開発環境は大変にレガシー。当時すでに下火だったPHPとjQery。バージョン管理は驚きのSVN。2年前のチケット放置されたRedmineには辞めていった社員名前がズラリ。

開発スケジュール社長が思いついた機能を誰かが開発する流れなので常にグダグダSES現場に出ている社員は常駐先の仕事が終わってから自宅で開発をしているらしい。もちろん残業代なんてもの存在しない。よって誰も開発したがらない。社長はこのサービス市場流通させると息巻いていたが、とても使い物にはならないクオリティゴミだ。ゴミを開発する仕事だ。

とはいえ仕事が他にないので頑張って開発した。ここで頑張ったのが後に牙を剥く。


1ヶ月後、常駐先が決まった。有名企業の子会社技術レベルも相当高かったと思う。今から考えるとここに出向されたことが唯一の救いだった。

SES企業から常駐している人たちのチームに加わる。チームリーダーはとても優しい人で分からないことは何でも教えてくれた。顔すら知らないのに罵倒してくる自社の上司よりこの人の部下になりたいと思った。

常駐先の社員は有能だが淡々とした人が多く仕様確認以外で話しかけると嫌がられた。自分の専門外でどうしても分からない技術があったので1度だけ質問したことがあったが、何で分かんないかなぁとタメ息をつかれた。こわすぎる。

とはいえ優しいチームリーダーの元でなんとか仕事ができるようになった。知らない技術を学べるのは楽しくヤル気も上がった。


自社の業務は最悪だった。1週間に2度くらいの頻度で社長に呼び出されるので帰社する。

電球切れたから買ってこい」

「今から掃除機かけろ」

「社外用の資料印刷してホッチキスで止めろ」

ひえ〜!エンジニアって雑用係だったんだ〜!


ある日、雑用をこなしていると初めて見る社員が現れた。社長と話しているがスゴい罵倒されている。かわいそう。

「お前ホントバカだな!」

「そんなんだからクソデブなんだよ!」

やばい。これがパワハラか。

早く辞めたい。この一心だった。

でも今辞めたら転職できる気がしない。

半年だ。半年続けたら辞めよう。



その後、常駐前に自社開発を頑張ったせいで自社開発を押し付けられてしまう。9時~18時は客先常駐。19時から雑用係。明け方まで自社開発という生活になる。

結果、客先で倒れた。チームリーダーに何があったのと問われ、自社の開発が大変で……と答えてしまった。チームリーダーは客先社員に報告。客先社員は客先営業に報告。客先営業は弊社の社長に報告。当日に社長から呼び出しをくらう。

身体心配なんてされず、ただひたすら罵倒された。客先で倒れるなバカ野郎!お前のせいで謝る羽目になっただろクソが!とか言ってた気がする。意識曖昧だったので細かく覚えてないけど。

客先に自社開発の話をするな!情報漏洩で訴えるぞ!とも言われた。これは正しい指摘だけど一方で自分技術的な内容もサービスの内容も話していない。そもそも残業代未払いだろ。

そう思うと無性にイライラしてきて、その場で退職したいと伝えた。

社長は暴れだした。

机を蹴り飛ばし大声で怒鳴っている。お前にいくら使ったと思ってるんだ!お前は障がい者だ!地獄に落ちろ!とか言われた。やばい人だ。

そんなこんなで退職しました。


以上がプログラミングスクールからブラックSES就職した話。ここまで読んでくれてありがとう

ちなみに転職成功して、今は自社開発企業で楽しくエンジニアやってるよ。先日リードエンジニアになって年収SES時代と比べ物にならないくらい増えた。人間関係は良好だしリモートワークもフレックス制もあるからのんびり働ける。

あと数年頑張ればもっと有名な企業転職できるかもしれないしフリーランス自由気ままに海外生活夢じゃないレベルになった。

エンジニアに夢はあるんじゃないかな。でもそれはスクールを出てすぐに掴めるものじゃないと思う。スクール同期生は半分くらいがエンジニアを辞めたらしい。現実絶望したのかな。

もしあなたプログラミングスクールに通いたいなら止めないけど、まずはネットプログラミングに挑戦してみて欲しい。1日8時間。連日の開発が嫌じゃなければスクールに通ってみてもいいかもね。年末年始も開発しろ自分は思わないけど、週5で開発できないと仕事にならないし。

最後に、この記事を書くきっかけになった、鉄道会社を辞めたエンジニアさんが幸せになりますように。


終わり!


追記

ニュースサイト見てたら自分記事出てきてめちゃくちゃ笑った。以下気になるブコメに返信。


転職について詳しく

退職から転職まで書くわ。

退職を伝えた後、休職以外認めないと言われたので休職した。心療内科会社ブラックから辞めるために診断書くださいと伝えたらすぐに診断書を貰えたので退職願と一緒に社長に提出。

社長はずっと恨み言をつぶやいてた。

最初から目付きがおかしいと思ってた」

「お前はエンジニア向いてないよ」

とかそんなん。最後までやばい人だな。

ハンコ押してさよなら。その日は人生で1番清々しい気持ちマックを食べた。


転職活動を始めたかったが入社半年で辞めたので実績が終わっていた。ポートフォリオでも作るかと思い、AndroidiOSアプリを作ってリリースWeb系も手広く勉強した。GolangとかTypeScriptとか。あとAWSちょっとだけ。

3ヶ月くらいで貯金が底を尽きたので転職活動スタート。自社開発10社くらいに応募。面接できたのが3社。

2次面接で「恋人いるの?」と聞かれ、最終面接で「このアプリ使いにくいね」とボロクソに言われた会社内定をもらった。サービス内容も人も面白かったしオフィスキレイだったので入社。今に至る。

そういえば、転職先で前職の源泉徴収票必要になったとき総務の人が前職に電話してくれたんだけど、めちゃくちゃに悪口を言われたらしい。

「アイツは鬱病からすぐに辞める」

とかなんとか。総務の人に心配された。心配かけてごめんね。


嘘松

嘘松だったら良かったのにね。有名企業に行ってみたいとかエンジニアとしての夢はあるけど、今の会社は気に入ってるしストックオプション欲しいから辞めずに開発頑張るよ。


スクール悪くないよね

そうだね。スクールで教わったことは正直オンラインで学べるレベルだったけど、フリーターがいきなり正社員になれたんだから斡旋制度には助けられたよ。自分スクールに求めるのはもう少し実践的な内容にして欲しいことかな。せめてHTTP通信くらいはカリキュラムに入れるとか。


SES経験がないと難しいのでは

難しいと思う。社長が「スクール通っていた期間も入社していたことにしよう!」と悪魔的な発想を持ち出して経験者の体で出向してた。

もちろん業務内容にはついていけずチームリーダーに頼りっぱなし。最終的にテストコード担当になってた気がする。


PHPもjQeryもRedmineSVNも現役だよ!

仰る通りです。すみません

ただ、ホント個人的意見を書かせてもらうとWeb業界デファクトスタンダードからこれらの技術はすでに外れてると思う。

こういう意見が出るから技術にはあまり触れずに書いたんだよな〜。


いきなり8時間で脅すのはどうなん?

そうかもね。

諦めろとは書いてないけど指標ひとつにして欲しかった。スクール通ってたとき「あ、この人プログラミング嫌いなんだな〜」って人結構たから。向き不向きはわかると思う。


ホントに半分もエンジニアになれたの?

卒業した時点では同期生は全員エンジニアとして就職してた。スクールが何をしてでもねじ込む。その後もエンジニアを続けてたのが半分くらい。卒業した1年ほど後に同期生バッタリ会ったことあるけど人材派遣側に回ってて笑った。


終わり!

2020-12-20

プライベートメソッドテストすべきか

「すべきでない」というのがたぶん多数派

テストすべきでない理由としてだいたい次の理由があげられる。

プライベートメソッド関数テストする必要は無いと考えていますプライベートメソッドは、実装の詳細であるからです。

多くの場合、そのクラスパブリックメソッド経由でプライベートメソッドテストも同時に行えます

プライベートメソッドのテストは書かないもの? - t-wadaのブログ

ほとんどの場合プライベート メソッドテストする必要はありません。 プライベート メソッド実装の詳細です。

プライベート メソッドがある場合は、パブリック メソッドを見つけて、そのメソッドに対してテスト記述します。

単体テストを記述するためのベスト プラクティス - .NET | Microsoft Docs

プライベートメソッドテストするな」と強く主張されるのは、ケント・ベックの影響もあるかもしれない。

例えばtwitterで、パブリックメソッドにだけテストを書き、テスト必要なほどプライベートメソッドが複雑ならそれを別のオブジェクトに切り出す必要があると発言している(twitter/kentbeck)ように、プライベートメソッドテストに強く反対している。

またベックの書いたSUnit(xUnitの源流にあたる)には「ひとつテストひとつオブジェクトで表し、それによってテスト独立性を高める」というアイディアが使われている(そのアイディアを実現するためにとても複雑な設計をしている Simple Smalltalk Testing: With Patterns)。テスト自身ひとつオブジェクトとして独立しているなら、テスト対象となるオブジェクトプライベートメソッドテストできないのは当然のことになる。

しかし「プライベートメソッドテストがしたい(したくなることがある)」と感じる人も相当数いる。

そう感じる人にとってはむしろここからが本題で、

問題になる。

テストファーストで開発するなら手を動かしながら軽い気持ちで書きたい。

例えそのクラスがprivateメソッド依存関係があっても。

コンストラクタインジェクションされたクラスのprivate メソッドでもテストファーストしたい - Qiita

privateなルーチンの自動テストは面倒だ。実際にコーディングするとき最初publicにしておいてテストしてうまく動いていそうならprivateにするのだけど、この「いそう」がくせ者。いっそのことすべてpublicにしたくなる。

私は元々メソッドはprivateにしない主義なのでメソッド場合問題ないのだけれど、ファイル内の「関数」が問題になる。和了計算だと和了形判定とか符計算とか和了役判定とか単体でテストしたい内部関数が山ほどある。(twitter/koba0367)

private メソッドテストすべきか問題原則論だけだと袋小路に入りがちだから、private メソッドテストしたくなる具体的な場面について議論したほうがいいと思う。

自分レビューでよく見る例としては、複数の public メソッドの重複部分を private メソッド抽出した結果、濃い private メソッドと薄い public メソッドが一対多関係になる場合が挙げられる。設計としては間違っていないし、わざわざ public メソッド経由でテストする意義があるかというと微妙。(twitter/ts7i)

きれいなインターフェースを作ろうとすればするほどpublicメソッドじゃない部分に複雑性を追いやることになり、壊れた時に手戻りが大きすぎると思ったら、プライベートバックドア開けてでもテスト書くようにしてます (twitter/mizchi)

しかプライベートメソッドに対するテストを書こうとすると大概リフレクションなどで可視性の制限をすり抜けるとかメソッド可視性を変更するといった回りくどさやコストの導入が必要になるので、じゃあプライベートに対するテストはそうしたコストに見合うのかが問題になる。

伊藤さんの答えは「原則書かないほうがいいという大前提のうえで、どうしてもというときは、"これはテストのためにpublic"にしているというコメントの上でpublicにする」だった。

自分は「テスタビリティのためにメソッドをpublicにする」っていう"実プログラム挙動を変えること"の方が、「privateなメソッドテストコードのみsendで叩く」よりも怖いって思ってることに気がついた。(twitter/highwide)


メソッドプライベートパブリックかという話とそれをテストするかどうかは別問題だろという意見もある。

単体テストホワイトボックステストだとするなら、publicかprivateかでテストの有無が変わるのは明らかにおかしいだろ。ややこしいロジックはprivateに隠蔽すべきだが、そこがテストできないなんて。 (twitter/kmaebashi)

private メソッドテストするかどうか? まず最初に言っておきたいのは public/private は抽象設計問題であって、テストすべきかどうかとは当然無関係だろうということ。(twitter/qeigoi)

特定言語の貧弱な機能思考制限を受けて誤った結論を出している典型的な例。

"テストを書くべき"と"上位層から可視性"は直交する概念

https://b.hatena.ne.jp/entry/4684049296462116226/comment/megumin1

テスト粒度メソッドアクセス権は独立したものなので、「プライベートメソッドテストすべきか否か」という切り方自体ナンセンスではあるのだが、現実問題としてはアクセス権がテストに影響するので難しい。(twitter/AoiMoe)

private メソッドテストはすべきかどうかというより、「できるべき」であって、それができないというのも、ある種、言語機能テストインピーダンスミスマッチと言えるのではないだろうか、と思っている。(twitter/aetos382)


プライベートメソッドテストがしやす言語での意見

RustやGoではプライベートメソッドに対するテスト簡単にできる。

そのためかプライベートメソッドテストすることに対して拒否反応があまりないようだ。

Rustのテストファイル内とtests/以下の2箇所に書ける。

テストには開発用のホワイトボックステスト仕様確認用のブラックボックステストがあり、前者をファイル内に、後者をtests/に書けば良い。

例えば度々議論になるプライベート関数テストについてはもちろんホワイトボックステスト。(twitter/blackenedgold)

Rustではプライベートに対して何の手間もなくテストが書ける。

概念的にはプライベートに対するテストは外部コードではなく内部コードの一部として見るべきなのだろう。

Rust入門を兼ねてプロジェクト・オイラーの問題を解く - 再帰の反復blog

Rustでprivateなメソッドテストを書きたいなら、そのメソッドのすぐ隣に書けば内部アクセスになるから普通に書けるよ、ってのは目からウロコだった。できるだけ近いところにテストを書こうっていう文化と相まって最高。(twitter/kuy)

Rustみたいに単体テストは同ファイルに書ければいいのに

assertionチックにprivateメソッドのすぐ下にテスト書きたい

ドキュメントにもなるし (twitter/takaya_tim)

Rust のようにユニットテストプロダクションに混ぜる方式はおれもいいと思ってて、テストプロダクションを分離することで private 関数テストができない問題があるけど(テストしたければクラスを分けよ/メソッドを公開せよ/テスト必要なし、に分かれるよね)、そもそもこの議論不要になるよね (twitter/nunulk)


go言語だとプライベートメソッドテスト普通にやりますね。(twitter/mattn_jp)

昨日「private method の単体テストは書くか否か」という話題がちょいとあったのだが、わしは当然書く感じの昨今を送ってきたもんで何で書かんのやくらいに思ってたんだけど、Go だと private なやつのテストが書きやすいってのがデカそう。(twitter/pankona)

golangのテスト書いてたけど、テストプログラム名前空間(パッケージ)が、対象プログラムと一緒で、そのためプライベートメソッドでもテストできるの良い感じ (twitter/74th)

Goテストコードテスト対象と同じパッケージにすればエクスポートしてない関数でもなんでもテストコードから参照できるんだけど、これってプライベートメソッドテストすべきか議論するよりテスト書けと言われているようで好き。(twitter/plan9user)

プライベートメソッドテストするか?」とは別にドキュメントソースコードと同じファイルに書いていい(文芸プログラミング)なら、単体テストテスト対象と同じファイルに書いてもいいのでは?」というのも論点になるかもしれない。

ログイン ユーザー登録
ようこそ ゲスト さん