t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

ネット検索で見つけたソースコードのコピペはアリかナシか

今回は、ネット検索で見つけたソースコードのコピペがアリかナシか、私なりの見解を書いてみようと思う。

シチュエーションによって判断が変わってくると思うのでチャートにしてみた。
f:id:t-hom:20220224001829p:plain

ライセンスによる判断

まずライセンスがコピーを許さない場合は絶対にNG。これはマナーとかじゃなくてガチの法律問題になってくる。
個人的な学習目的や遊びであっても、製作物を配布したりGitのパブリックリポジトリに置いたりしてしまうとアウトなので、ライセンスがよく分からないもののコピーは避けた方が無難。また、コピーしても良いけどこの条件でと指定がある場合は当然従う必要がある。

ちなみに私のブログに書いてるコードの利用については、こちらご参照。
thom.hateblo.jp

用途による判断

ライセンスの問題をクリアしたら、学習目的や遊びなら別に構わないと思う。
コピペでは実力が伸びないという意見もあるけど、それは中身分からんけど動くからいいやという思考停止だと伸びないということであって、学習目的で他人のコードを動かしながら学ぶという姿勢なら思考停止によるコピペはあり得ないから気にしなくて良い。それに遊びだったらライセンスをクリアしている以上他人がとやかく言う問題ではないし。

仕事の場合、自分がコードの内容を完全に把握していればまぁOKかなとは思う。これは挙動とか概要を理解するのではなく、ちゃんと読んでロジックが分かるという意味。たまたま自分にアイデアが無かっただけで、答えを見たら完全に理解して、もう一度自分で書けと言われたら書けるという状況を指す。それならコピペでも良い。

ただし、変数名くらいは自分のコードの文脈に沿ったものに直そう。仕事で書く以上は自分が辞めたら誰かがメンテナンスする可能性があるわけで、コピペでもはや意味が変わってしまった変数名をそのままにしておくのは罪だ。

内容理解による判断

難しいのが、自分の実力が足りず完全には理解できなかった場合。
基本的にはNGなんだけど、万が一正常に動かなくても影響がない・あるいはリカバリーできる場合はまぁ良いんじゃないかと思う。
そんなシチュエーションがあるのか?

例えばとある面倒な操作をするためのExcelマクロで次の条件をすべて満たす場合等。

  1. 正常動作しない場合、正常動作しなかったことに必ず気づく
  2. マクロ作者が居なくても簡単に元に戻せる
  3. マクロが無いなら無いで手でやればなんとかなる

あるいは作っているのがアーリーアクセスのゲームで、多少バグがあっても早くユーザーを囲い込む必要がある等の特赦なシチュエーション。あるいはWebのフロントエンドで、セキュリティやサイト機能に影響を与えない装飾的な部分など。

まぁ、業務アプリケーションの製作だとこういうシチュエーションは無いので、基本的にはNGだと思っておいた方が良いかなと思う。

内容が完全に理解できてなくて、更に正常動作しないと困る場合は何かあった時に説明責任を果たせないため、もちろんNGである。

ライブラリとネットスニペットの違い

こういう話をするとライブラリは?と考える人もいるかもしれない。
確かにライブラリも自分が書いたコードではないので一定の注意は払う必要がある。仕事なら会社で許可されたライブラリを使う必要があるし、アップデートが無いか気にかける必要もある。

ただ、ネット上のコードは基本的にはそのままコピペで業務コードになることが想定されておらず、説明の為に特化して必要な機能が抜け落ちていたりするので、他人のコードに組み込まれることを想定して作られたライブラリと比べてリスクが高い。

例えば、車のアクセルの動作を説明するためのサンプルがあったとする。
アクセル・エンジン・タイヤ・シャーシは揃っている。でもブレーキが無い、ハンドルもない、シートベルトもエアーバッグもバックミラーもない。基本的にそういうものだと思っておいた方がよい。プロトタイプを作った本人も、まさかそんなもので公道にでると思っていない。

プログラムの特性の話

プログラムは正しく作れば高速に大量の処理を行うことができる。誰が実行しても設計どおりの結果になるので、ユーザーが複雑な処理の中身を意識する必要がない。これが大きな利点である。

これは裏を返せばバグを混入させてしまうと、ステルス性高速ミス発生機と化す。
一瞬で大量の間違いを生み、そして本当にまずいことになるまで誰も間違っていることに気づかず、気づいたときにはビジネス上の損害がでた後ということが起こりうる。

こういう特性を考えると、自分が説明できないコードをコピペして業務コードに組み込むというのはそこそこの危険行為だ。

それでもどうしても使いたいコードがある場合

自分で何回読んでもロジックが理解できないけど、それでもそのコードを拝借したいというシチュエーションに出くわしたらどうするか。仕事だから、諦めろという訳にもいかない。

そういう時は、徹底的にテストする。
これは正常に使って正常に動くだけではない。それは当たり前。
あえて徹底的におかしな使い方をしても、結果が想定内のおかしさに収束するかどうかを見る。
踏んだら壊れる。落としたら壊れる。ここまでは分かる。でもまさか爆発四散して大けがしないよね?ってのもちゃんと確かめて。

コーディングをしていると特に初心者のうちは想定外のおかしさに出くわすことも日常茶飯事である。具体的には関係ないと思ってたデータが全部ぶっ飛ぶとか、無限ループ突入してフリーズするとか。

もう少し厳密なVBAでのテストについては過去に軽く書いたので以下の記事をご参照。
thom.hateblo.jp

VBA以外のテストについてはこんなブログより素晴らしい記事とか書籍がでてるはずなのでそっちをご参照。

終わりに

今回はネット検索で見つけたソースコードのコピペはアリかナシかを書いてみた。
あえてチャートにしたけれど、コピーしてOKというのは割と例外的なシチュエーションで、業務では原則はナシと考えた方が良いかなと思う。

そしてどうしても使いたい場合についても書いた。

話を一般化すると、演繹が使えないなら、せめて帰納で検証しましょうということである。

演繹…一般的・普遍的な前提から、より個別的・特殊的な結論を得る論理的推論
→コードが正しいから、当然正しく動く。

帰納…個別的・特殊的な事例から一般的・普遍的な規則・法則を見出そうとする論理的推論の方法
→徹底的にテストした結果、ほぼどんな使い方でも(←重要)想定通りに動いたので、コードは恐らく(←重要)正しい。

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。