はてなキーワード: ソースコードとは
システムを内製するので、かろうじてプログラムをかじったことのある自分が抜擢。
泣きながら障害を起こしながらも、2~3年くらい安定稼働させた。
DCに設置された連携先のサーバーが片系死んでるのお客さんに黙ってて
閉域とはいえ、サポートとっくに切れてるしやべぇからこっちも直せ、と。
設計書もソースもなかったが、バイナリからソースコードが取り出すことができた。
さぁ切替だと思った矢先、事件が起こる。
同僚の嫁に、上司が手を出そうとしたのがばれ、上司が逆切れした。
上司と一緒は嫌だなぁ、と一緒に飛ぶことに。
サーバーはここにラッキングしてあるで、取り出して持っていってください。
手順はまとめたんで、この通りやってくれれば動きますよ。と上司に伝える。
異動後の部署で仕事をこなして1年経ったか、引継ぎの子から電話。
「連携先のサーバーが障害起こしてて、どこ見たらいいですか?」と。
あれ、障害起こすと省庁に呼ばれるやつじゃない?と思いつつ
サーバーのxxにログファイル出てない?と薄い記憶を頼りに自分が作ったプログラムをおもいだす。
え?フォルダ消えたの?Dドライブの直下って何ある?ン?ピンとこないフォルダ群。
悩む。突き放すこともできるが、呑みに行ったこともあるしなぁ…。いや、会社が危ない。
一旦電話を切って空を見つつ俺考えてますよアピールしていると、ふと気になることが。
さっきのフォルダ構成ってどっかーで見たよねー?引継ぎの子に電話。
サーバーラックにxxxxってテプラの張ってあるサーバー2台、ある?無いよね?
「…えー、っとあります。」
自分が作ったサーバーはあの時のまま、DCに運ばれるのを待っていた。
引継ぎの子が見ていたのは、1年前切り替えようとした古いサーバーで、延命というか放置されていた。
古いほうの復旧方法は流石に知らないので、そりゃしらんわーとお断り。
片系壊れてて1台で動いてるサーバーをエイヤで再起動するらしい。
その後連絡は無いので、復旧はしたんだろう。会社は今も存続している。
こういう仕事は割とあるんだがなかなかのヤバさだったので紹介したい
ちなみにサービスの内容は非常に良くてユーザーも万単位で付いているらしい
バックエンドはAWS EC2で動作しているがログインアカウントは共通化されていてパスワードを全員で共有している
ユーザーを追加しようとしたら「そのような勝手な行為はセキュリティ上許可されていません」とのこと
本番環境とStagingはインスタンスが分かれているが運用は同じ方法
Staging上で5人ぐらいが作業しているが、ホームの下にそれぞれのユーザーが自分の名前でディレクトリを作って作業している
バックエンド側のシステムは詳細は伏せるが、某システムで動いている
仮にNode.js系だとすると、package.jsonがあってnpm run installでインストールするのだが、普通にインストールしようとするとエラーになる
内容は依存関係で失敗しているのだが、本番も同じソースで動作している
動作させるにはnode_modulesをまるっとコピーして、とのこと
さっきの自分の名前のディレクトリ配下にコピーしてきて、適当なポート番号でサーバを立ち上げれば一応は動く
このため、新しいモジュールを入れようとすると依存関係で失敗するため、便利なモジュールがあってもインストールできないし
セキュリティアップデートも当てることはできない(現にバージョンがすごく古い)
ソースコードはGitHub管理されているがセーブポイント感覚でcommitされているのでコミットログを見ても何が起きているのかさっぱり分からない
おまけにPRも使わずにmainにマージしまくっていてわけがわからない
加えてソースコードはコメントアウトの嵐でどこに何が書いてあるのかさっぱりわからない
データベースはPostgreSQLだが山ほどテーブルがあるのに外部キー依存は入っていないしVIEWも作られていない
まぁ、他にもテーブルを見ていくとアンチパターンのオンパレードで、EAV、ジェイウォークあたりは確認できたしHTMLやSQLが格納されているテーブルも見つけた
ソース上でクエリを作ってAPIを作っているが、ザッと見ただけでもインジェクションし放題の状態になっていた
フロントエンドも詳細は伏せるが、いわゆるReact的なものを利用している
こちらは npm run installでインストールできるし npm run devでちゃんと動く
ただ前述の通りバックエンドはローカルで構築できないのでEC2を利用するしかなく、CORS対応のためのプロキシを自前で用意する必要があった
バックエンド同様にGitHub管理されているが、管理しているだけ
バックエンドは5人ぐらいが利用しているが、ソースコードを編集するのは実質1人なのでコンフリクトはほとんど起こさないらしいが
フロントエンドは5人ぐらいが編集するのでコンフリクトしまくっている
解消するときにデグレすることが日常茶飯事でその都度Hotfixしている
コードもコメントアウトだらけなのに加えて、不必要なコードが大量にあるので可読性が著しく低い
(難しい処理を読み解いて追いかけていったら最終的に使われていない、などが大量にある)
2000行ぐらいあるコードとかChatGPTに突っ込んだら20行ぐらいになる予感がある
また、DBがご覧の状態なので取得されるデータも全然抽象化できておらず、コードが膨れ上がっている
例えばProductの一覧データをサーバから取得して、ユーザーがクリックしたProductをCartに投入するのだが、投入する情報はProductではなく、CartItemにする必要があるし
OrderするときはOrderItemにしてAPIを叩く必要がある
ほとんど同じ情報なのだが微妙に変わっていたりKey名が違っていたりするのでそれぞれ変換する
他にも数え上げればキリがないが、コピペして少しだけ改変している部分などが大量にあってバグがあるのかどうかすら判別できない
DBにHTMLやSQLが入っていると言ったが、調べて見るとDBから取得したHTMLをそのまま埋め込んで表示していたりした
SQLについてはフロントエンド側でSQL生成しており、そのテキストをAPIに送り込んでサーバ側で実行して貰った上で格納とかしていたので
「ここにDROP TABLEとか書けばTABLE消えるんですか?」
と聞くと
とか言われたのでことの重大さを伝えたが、まだ対処できていないようだった
認証等はOAuth2を使っていたので大丈夫そうだったが、本当に大丈夫かどうかは自信がもてない
システム内容はゴミのような状態だがサービス的には良いので、幹部やプロダクトオーナーからは追加要望が山盛り来ている
開発チームが「稼働が足りない」という理由で断ったので「じゃぁ支援して」ということで自分のところに来たのだが
「申し訳ないが、そもそもそういうレベルに無いし、全て作り直しが必要」
と伝えてもどうやら伝わっていない様子
ちなみに元々の開発チームは過去にもこんな感じでサービス作ってたらしいが売れないので問題になってなかった様子
ぱっと見は動いているように見えるのが厄介なところ
正直逃げたいところではある
ある日、プールで水泳の練習をしていると、後ろから肩を叩かれて振り返ると、なんと幽霊の姿をしたおばあさんが立っていた。おばあさんは「私も泳ぐのが大好きだったの。一緒に泳ごうかしら?」と明るく笑った。
↑のように変なとこで途切れてるAIボット風の文章が昨日あたりから増田に連投されている。
プール</a>の踊り場に立ち、<a class="keyword" href="/keyword/%E6%B7%B1%E5%91%BC%E5%90%B8">深呼吸</a><p><a href="//www.■■■■■.com/getmedia/5b1435fc-567b-4c2f-b576-80910175dd7c/09ao4qsg"> </a><p><a href="//www.■■■■■.com/getmedia/b8bb6d71-74a3-4c01-831c-c49a75b5a10a/09wx0d69"> </a>
とにかく粗製乱造で一発当たれば儲けもんみたいな雑な作りのやつ。
ゲームに対しての愛なんて全くないし、ソフトウェアも全く好きそうじゃない連中が作ってる匂いプンプンの奴。
これもうヤクザが資金洗浄のために半分返ってくれば儲けもんみたいにやってんじゃねーかってなるようなゲームがあったわけじゃん。
んでまあ怪しい連中がウジャウジャいて法的にもアウトなこと結構やってるわけ。
ユーザーが解析してみたらどっから盗んできたんだよこのデータっていう事件が結構あってさ。
いやそもそもユーザーが解析してるのがおかしんだけど、相手が反社ならこっちも好き放題やっていいじゃんみたいなヤバイ空気だったんだよ。
特にDMMで新作出たときとかが凄くってモラルのないユーザーが開発者のモラルも終わってるんだからガンガンいくぞって初日に解析かけまくるわけ。
その中でも有名なのが「ジャブジャブ課金させたくなるような」ってアレな。
ソースコード解析したのか親フォルダ漁ったのかとにかくそういう違法アクセスすれすれのことやって悪を暴いてやったぜとキャッキャッしてるユーザーと、それにお似合いのどうしようもない開発者の世界だった。
でも今はそういうのだいぶ落ち着いたじゃん?
ガンホーとサイゲがず~~~っとトップに居座ってるうちになんか大企業としての落ち着きみたいなの身につけちゃって、そっから他の会社も追従して「ウチはデカイ所だからコンプラちゃんとしてますけど?まあゆーてバグったらメンテ班呼び出して徹夜させてるけどユーザーには関係ないよね」みたいな感じになってさ。
今でもちょこちょこ「これデータ抜かれたりしてるんじゃね?」って不安になるようなゲームがストアにあるけど、そういうのってどれも海外製で日本製はおおむね落ち着いてるというか勢いがないというか。
プログラミングの話題と相性がいいんじゃないかと思って、昔読んだことがある達人プログラマー (1999年に出版された第1版の方、2019年に出版された第2版ではない) をぱらぱら見返してみた。プログラマーとしての姿勢やプラクティスなどは一般に普及したかどうかの判断が難しい。間違いなく一般的になったなと思えるものに絞って書く。インフラ面の進化が大きいと言えそう。
フリーレン「わずか数年で人類の開発方法論に組み込まれ、新しいインフラによってシステム開発の生産性を向上させた。」
でも今のチームはソースコード管理システムを使っていないんだけど……
恥ずかしいと思ってください! そして、これが伝道師となる機会だと受け止めてほしいのです。しかし、彼らが自ら進むべき道を見つける時まで、あなた一人ぼっちであってもソース管理を使うようにしてください。
フェルン「いまのはバージョン管理システムです。」
いつリファクタリングを行うべきなのか?
コードがうまくなじんでいないと感じたり、まとめるべき 2 つの事柄を見つけたりといった何か「おかしなもの」に遭遇した場合、手を入れることを躊躇してはいけません。
テストの文化
あなたの記述したソフトウェアはすべてテストの対象になります。あなたやあなたのチームの人間がテストをしなければ、最終的にユーザーがテストを強いられるのです。このため、テスト計画を徹底的に練る必要があります。しかし、事前にものごとを少し考えるだけでメンテナンス費とヘルプデスクへの呼び出しを大幅に削減できます。
(中略)
テストは技術というよりは文化なのです。こういったテスト文化は、使用する言語に関係なくプロジェクトに植え付けることが可能なのです。
フェルン「いまのはテスト駆動開発です。」
多くのプロジェクトでは、こういったレベルのビルドは毎晩自動的に実行されています。つまり、プロジェクトの特定部分を夜間ビルドで作成すると同時に、個別のテストよりも完全なテストを実行できるのです。これによって、完全なビルド実行時に行うテストをすべて実行させることも可能になります。結果として、その日のうちに回帰テストの問題を見つけられるようになるわけです。ソースの変更後、できるだけ早い時点で問題を検出できれば、バグの検出と修正を円滑に進められるようになるはずです。
サイレントマイノリティの方々、見ているだろうか。サイレントマジョリティーじゃないの?と思うかもしれない。サイレントマイノリティは今作った造語だ。どういう意味かというと、いくらうるさく喚いても誰からも関心を持たれず、「サイレント」であるように見られる、思想的マイノリティの人々のことである。あなたならば、有名人がなぜ有名であるのか、あるいはなぜ特定の事象が流行しているのかについて疑問に思っていることだろう。
この世の中が次のような世界であったならどうか。あなたはプレイヤーであり、周囲はNPCである。NPCたちはあなたの発言を意図的に無視するようにプログラムされている。あなたがいくら努力しても、あなたが成功することも、有名になることもない。あなたが「アノ人たちのようにちやほやされたい」と嘆くが、その願いが叶うことはない。
1億人の「敵」は、誰が評価されるべきかどうかについて、社会的取り決めをしている。これはイイネされるべきだとか、彼はフォローすべきだとか、そんな具合である。これは一種の「社会構築主義」とも言える。真理は社会が決めるという主義のことだ。連中は客観性を否定するため、常に政治的に物事が決定されるという信念を持っている。「数の力」があらゆるところに存在し、あなたは「評価されるべき対象」の外側にいる。
さて、ここで質問である。このような地獄で、あなたはどのようにして満足して暮らせるだろうか。愛の反対は無関心であるというが、まさに世界があなたに対して無関心なのである。あなたを愛する人がいない中、どうやってNPCを出し抜くのか。
ソーシャルメディア(SNS)とは何か、という質問に対し、あなたは「データの狩場」と答えることができる。あなたがいくら真剣に向き合って、心の声を打ち明けたところで、連中はあなたに無関心である。であるならば、連中のありとあらゆる発言を「データ」と考え、それを分析することに楽しみを見い出せば良いのである。NPCをプログラムと考えるなら、そのソースコードを解読するわけである。あなたを人間とみなさない連中を、人間とみなす必要はない。
気をつけてほしいが、連中はそうはいっても法律を作り上げているし、あなたも法律に守られている。いくら連中がゾンビに見えたからといって、法律違反をすることは避けなければならない。連中の中には沢山のスパイが潜んでいるが、そういった非合法の輩でさえ、法律はむやみに破ったりはしない。
って「現時点でAIに足りない部分」に難癖をつけて、人類による家内制手工業を守ろうとする発言。
想像力ねえなー
って思う。
特にシステム開発分野。コードの断片は書けても設計はできないだろとか運用できないだろとか。
想像力ねえなー
って思う。
たしかに現状のAIにはまだ未熟なところがたくさんあるし、「あれもできないこれもできない」という指摘も現時点では妥当なものだろう。でも10年後はどうかな。5年後は。明日は。
ほんのちょっと前まで、人間以外がプログラムコード書くなんてできない世界だったじゃん。
それがAIがコード書くようになったらあわてて「いいやAIにはあれができないこれができない」って言い出す。
逆だよ、言ってることが。
できないことを指摘できるってことは、裏を返せば
「じゃああれとこれができるようになればいいんだね」
ってところまで来てるわけでしょ?
そしたらまたどうせ「まだそれとかこれができてない、まだまだAIに仕事は任せられないね」
ってなるんだろうけど、それだってそのうち克服しちゃうじゃん。
そのサイクルをぐるぐる回してるうちにAIってどんどん「使えるもの」になっていくわけじゃん。
すごいAI楽観論をもとに語ってるけど、でも、AIが目指してるとこってそこでしょ?
んで、AIが十分に論理的に育ったら、やがて自己強化サイクルを自力で回しだすよね。そうなったらもうシンギュラリティですよ。
なんなら、みずほ銀行PJのドキュメントとソースコード全部呑ませて「これを最適化してください」で仕事が済んじゃう日が来るかもしれないよね。
「未定義の要件が◯件、曖昧な要件が◯件、矛盾する要件が◯件あります。役員全員集合」とか言ってきて。
夢じゃん。
そういう夢を見ようよ。
俺たちは、18世紀19世紀の産業革命がもたらした(ある種破壊的な)社会構造の変化を歴史で知っている。
AIの未来を過小評価したり矮小化したりしている人々は、「あれと同じことは起こらない、起こってほしくない」っていう現状維持バイアスに囚われていることに気づくべきだ。
もうすでに変わり始めてるし、これは序章に過ぎないんだよ。