🗂

コピペをするな!コピペしろ!

2024/07/31に公開

まえがき

新入社員の方はプログラマーになってから、コピペは良くないと言われたことあるでしょうか?
おそらく聞いたことはあると思います。

一方、常駐先に入るとコピペしろって怒られる事も出てくると思います。
さて、全く逆の教えですがどういう事でしょうか?
それぞれ見ていきましょう。

コピペが良くないパターン

厳密に言うとコピペしてはいけない事などありません。
コピペはコンピュータの最も素晴らしい機能の1つであり、活用しない手はありません。

それはプログラミングの世界でも同じです。

考える事をやめてしまう

じゃあ、なんでダメだって言われるのかというと、自分が何をやっているのか理解していないからです。

2024年現在、フレームワークを使わないjavascriptやPHPくらいなら、やりたい事をでググったり、ChatGPTに質問すれば、そのまま動くレベルの答えが出てきたりします。
LaravelやjQueryのようなメジャーなフレームワークでも同様です。

例えばjavascriptでボタンクリックイベントを実装したいとしましょう。
「javascriptでボタンクリックイベントを実装したい」でGPTに投げた結果が以下。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Button Click Event</title>
</head>
<body>
    <button id="myButton">クリックしてね</button>

    <script src="script.js"></script>
</body>
</html>
// script.js
document.addEventListener("DOMContentLoaded", function() {
    const button = document.getElementById("myButton");

    button.addEventListener("click", function() {
        alert("ボタンがクリックされました!");
    });
});

はい、これをコピペすれば動くはずです。
でもこれ、自力で読めますか?
コードレビューで他人に説明できますか?

イベントリスナーとかオブザーバーパターンとか知っていますか?
無名関数とか第1級関数オブジェクト、高階関数って知っていますか?
まあ、用語は知らなくても動きを知っていればいいですが、ワケわからないままやっていると、ここに何か処理を追加する段階で詰みます。
いや、この程度なら引き続きGPTに聞けばある程度対応してもらえますが、複雑になってくるとそうもいきません。

ちなみに、この話は以前私が隣の人がコピペで困っていた時のやりとりから執筆しています。

案件・プロジェクトに合わせて編集していない

コピペした後に全く編集していないパターンもあります。
ひどい人だと変数名や文字列の値までそのまま、中にはコメントまでコピペしてコミットしている人がいました。

 function fun(var hoge) {
    if (hoge) {
        // ここにhogeがTRUEの場合の処理を書く。
        alert('OK');
    }
 }

冗談だと思うでしょうが、実際にこんな感じの変数名をそのまま使っているソースコードがありました。
コード全てを覚えているわけではないのでそこは適当ですが、「hoge」って書いていました。
見た瞬間笑いました。楽しくて笑っているわけではありません。あまりの酷さに怒りを通り越して笑うしかありませんでした。

コメントも文言ははっきり覚えていませんが、こういう解説サイト用のコメントが貼り付けたままになっていました。
要するに、これを放置すると言う事はhogeが任意の変数名であることさえ理解していないし、こんなおかしなコメントを残していたらコピペしてきただけと言う事がバレるってこともわかっていないのです。

繰り返し構文や関数化などで対応すべきところをハードコピーしている

これは、ググった答えをコピペするというより、既存コードを元に拡張したり似たようなページを作る時によく起きます。

ほとんど同じコードだからと丸ごとコピーして違う部分だけを編集してはい、終わり。

これに関してはそれが正しい場合もあるのですが、関数に切り出して引数で制御したり、抽象クラスやインターフェースを駆使して保守しやすいコードを書けないか考えるべきです。

コピペした方するべきパターン

じゃあ、逆にコピペしないといけない、するべき時はどういう時か。

クライアントからテキスト変更を依頼された時

画面表示の文言を変える依頼があったとします。
この場合は必ず渡された資料からコピーして貼り付けなければいけません。

この時20文字もないような修正だと、キーボードから打った方が早い場合もあります。
しかし文言が一字一句決まっている以上、絶対にコピペすべきです。
手打ちだと、送り仮名や記号のあるなし、半角/全角の違いなど、必ずミスが出ます。
例えば「問合せ」と「問い合わせ」「ユーザ」と「ユーザー」「ありがとうございます.」「ありがとうございます。」
などなど。

Linuxのコマンド

リリース手順書などに記載されているLinuxのコマンドは内容によっては間違えると大変なことになるので、コピペが推奨される。
ただしlscdのようにそれだけでファイルの更新・削除を行わないものは手打ちで構わないが、それでも絶対パスが書いてあるようなものはコピペしてやらないと、その次のコマンドでとんでもないところのファイルを消したり、上書きするリスクが起きます。

カラム名

データベースのカラム名やそれを元にしたプロパティ名などは、コピペから行う。
さらにスネークケースからキャメルケースへの変換などもエディタの機能を使って行うべき。
一文字でも命名規則から外れたことをやると、保守性が極端に落ち、後でデバッグしたり、改修したりするときに検索が効かなくなって詰みます。

まとめ

いかがだったでしょうか?
コピペした方が楽そうなことほど、コピペしてはならず、手打ちした方が楽そうなことほどコピペしないといけない事がわかったと思います。

おおむね、ロジック系はコピペは良くない、固定文言や定義済みの英単語はコピペするべき、と考えてもいいかもしれません。

適切に使い分けていきましょう。

株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp

Discussion