質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.50%

自作したクラスの管理方法に関する質問

解決済

回答 6

投稿

  • 評価
  • クリップ 2
  • VIEW 1,405

hsato8

score 11

C++やPythonなどで、自分が使いやすいようにクラス化しているのですが、
時間がたつと、どんなものを作ったのか忘れてしまい、車輪の再発明をしてしまいます。

皆さまは、自作したクラスや関数などをどのように管理されているでしょうか?
漠然とした質問で大変申し訳ありませんが、ご助言いただけると幸いです。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

checkベストアンサー

+10

基本的なアルゴリズムであれば、よいライブラリがあるので、それを使います。
よいライブラリがない言語は使わないことにしています。

そうでないものについては、うまいベストプラクティスがないケースなので、
その都度書き直してたりします。

数ヶ月後にコードを忘れていることもありますが、
別のよい書き方を思いついていたりするので、
書き直したほうがより簡潔で速度も早いコードになってたりします。
そして数カ月後に更に…

最近だと数カ月後にライブラリのバージョンアップに伴って互換性もなくなるので…


あまりクラスをカスタマイズしない方がよい気がします。
特定の問題が簡単に扱えるようにカスタマイズするとその分汎用性は落ちますので。

ライブラリの実装がどうしても気に入らなく、より優れた実装があると信じているのなら、
オープンソースの場合直接コミュニティに参加してコミットするとよいと思われます。


大規模なプログラムを設計する際はもっとがんばりますが、
全体の設計は固定しても、個々の実装は変更が容易なはずです。
というよりそのようにがんばって設計します。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/04 23:11

    回答ありがとうございます。
    ライブラリにすでに実装されているものも、自分で書いてしまうことが多いので、なるべく標準ライブラリを使ってみようかと思います。

    追加の質問で大変恐縮ですが、標準ライブラリを組み合わせて、あるプロジェクトや案件用のクラスを作って、別案件で流用する等はあまりされないのでしょうか?

    キャンセル

  • 2018/02/05 10:23

    https://reactjs.org
    https://angular.io
    https://www.tensorflow.org
    などはうまくライブラリができていますよね。

    ライブラリとしてまとめることができれば流用することも可能かもしれませんが、コードぽんは難しいでしょうね。

    個人であればファイルを取ってきて加工してcsvファイルに書き出すためのスニペットを使いまわせたりするのですが。

    コードを部分的に再利用するのは難しい気がしますね。
    ファイルの入出力にフォーマットを決めるとちょっとは使いまわせますが、コードというより処理の使い回しですね。

    結局手を加えるとなると書き直した方が早く済むというのが実状な気がします。
    そうでなくとも、リファクタリングは同じ案件でコードを書き直しますからね。

    すごくうまく設計しないとプロジェクトを超えて利用するのは難しい気がします。

    キャンセル

  • 2018/02/06 21:01

    なるほど。リファクタリングを繰り返し、洗練されていくものなんですね。
    また、ライブラリを教えていただきありがとうございました。

    キャンセル

+5

こんにちは。

時間がたつと、どんなものを作ったのか忘れてしまい、車輪の再発明をしてしまいます。

同じものを再度作ること結構ありそうです。ですが、そもそも同じものを作ったのかどうかよく分からんです。以前に作ったことを綺麗に忘れてますから。

結局、覚えているものだけを使いまわしてます。忘れたらそれで終わりです。リストを作るなどしての管理はしていません。プロジェクト単位ではソースが事実上の管理リストになりますが、全く無関係なプロジェクト間で共有するためのリストは作っていないという意味です。

プログラミング言語も進歩してますし、自分自身も進歩してますから、昔作ったプログラムをそのまま使いまわすケースって結構少ないですし。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/04 23:09

    ご回答ありがとうございます。やはりそのまま以前のコードを流用するというのは難しいのですね。。。
    Chironianさんは、コメントの書き方に何か工夫をされているのでしょうか?

    キャンセル

  • 2018/02/04 23:30

    論理的な区切りがパッとみて判りやすいようなコメントを付けます。なるべく大きな単位でソースを把握しやすい姿にしたいからです。
    後は、デバッグで嵌りそうなことや嵌ったことはコメントしてます。

    キャンセル

  • 2018/02/06 20:59

    ご回答ありがとうございます。コメントのつけ方、とても参考になりました。

    キャンセル

  • 2018/02/06 21:03

    ご回答ありがとうございます。自分のコードを見直してみると、コメントと論理的な区切りが疎結合になっていないことが多いので、注意してみようと思います。ご助言ありがとうございました。

    キャンセル

+4

  • 少なくともdoxygen/JSDoc互換スタイルのコメントを付ける
  • コメントと合わせてみてぱっと何をしているかわからないような疎結合になっていないクラス/関数を作らない
  • 標準ライブラリの作法になるべく合わせる
  • 標準ライブラリの今後の動向を把握し、それに沿う関数/クラスを作る
  • そもそも自分で書かない、すでにあるライブラリを使う
  • テストを書く

追記

  • 標準ライブラリのクラス/関数群をよく知る(普段使ってないもので有用なものはきっとたくさんある)
  • デファクトスタンダードとなっているライブラリがあればそれもよく知る(C++ならboostとかEigenとかとか)

友人曰く

  • githubなどに上げて公開する
  • ブログに紹介記事を書くようにする
  • パッケージ管理がある言語ならそれに公開する
  • サンプルを書く

さらに追記

gitでソースコードを管理してかつコミットは粒度を細かくしておいてかつコミットメッセージをWHYがわかるように書くと、git blameをみて「なんでこんな実装にしたんだっけ」というのがわかって良さそう。他人が書いたコードを見るときにもgit blameはそれなりに見ているのでコミットが適切にされていないとすごく困る。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/02 23:53

    ご助言ありがとうございます。
    再度質問となり恐縮なのですが、
    ”標準ライブラリの作法になるべく合わせる”というのは、
    どのような意味でしょうか?
    例えば、下記ページで紹介されているmapライブラリ等の(C++の標準ライブラリ?)の書き方を参考にするということでしょうか?
    <http://ppp-lab.sakura.ne.jp/ProgrammingPlacePlus/cpp/library/009.html>

    キャンセル

  • 2018/02/03 00:33

    標準ライブラリの命名基準、関数/メソッド分け(結合性)を真似るというか設計を真似るというか、似たような操作は標準ライブラリと同じ方がいいよねというか

    キャンセル

  • 2018/02/04 23:13

    ご回答ありがとうございます。
    なるほど。設計をまねるのは大事ですね。頑張ってまねてみようかと思います!。ご指摘いただいたおかげで標準ライブラリで実装されている機能について理解が浅いことがわかりました。勉強になりました。

    キャンセル

0

機能の内容や目的等に関してはソースのコメントに書いてあると思いますので、新しくモジュールを作る際に記憶の片隅にひっかかったらgrepして似たような物がないか探すぐらいですね。
完全に忘れてたらそれまでです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

1.名前をしっかりつける
2.フォルダの階層、フォルダ名も含めてしっかり設計する

の2点を徹底すれば、似たようなものがないか探すときにどこを探せば良いか、なんという名前で検索すれば良いかわかるので、時間をかけてもしっかりやるのが良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/06 21:04

    ご回答ありがとうございます。
    フォルダ階層やフォルダ名も工夫してみようかと思います。

    キャンセル

0

車輪を作り直すと、昔より完成度の高い車輪になりますよ。何度も作り直しましょう。もし車輪を何度も作り直すのは面倒臭い!というマインドだったら、エンジニアには向いていないかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る