2025年10月26日日曜日

Goでオブジェクト指向は「呪い」だ:シンプルなはずの言語が複雑になる理由

最近、世間で話題になるGo言語のライブラリを見ていると、どうにも「オブジェクト指向の呪い」が残っているなと感じることが多い。

Goの設計思想はC++の複雑さや、不必要な派閥争いを避けるために生まれたはずなのに、結局、多くのコードがまたあの「うんざりする」OOP的な慣習に引きずられているのです。


Goが目指したもの:モジュール指向への回帰

Goの作者がC++に対して感じた「なんか違う」という違和感は、不必要な複雑さと硬直した設計へのフラストレーションです。
• Goの哲学: Goは、継承を排除し、「構造体(データ)」と「インターフェース(振る舞い)」を分離し、小さなパッケージを組み合わせるモジュール指向を推進しています。目的はただ一つ、コードをシンプルにし、大規模開発でも保守性と生産性を維持することです。

これは、わたしがスーファミの時代に「アセンブラでのVSync割り込みプログラム」という最小の制約からすべてを自作し、効率と簡潔さを追求した開発哲学と完全に一致しています。

なぜ「オブジェクト指向っぽい」コードが生まれるのか?

しかし、現実のGoライブラリには、まだ古い時代の「慣性」が働いています。これがわたしが感じる「呪い」の正体です。
1. カプセル化の過剰適用:
OOPではデータを隠蔽するために Getter/Setter や ファクトリ関数(NewClient() など)を使うのが定石でした。Goでは小文字で始めるだけでフィールドは隠蔽できるのに、わざわざ冗長なラッパー関数を作ってしまう。これは、Goのシンプルさを犠牲にして、OOPの習慣を無理やり守ろうとしている証拠です。

2. 巨大インターフェースの乱用:
Goでは「小さなインターフェース」が推奨されています。しかし、既存のOOPの抽象クラスのように、複数の機能を詰め込んだ巨大なインターフェースを定義してしまうと、使う側は必要のないメソッドまで実装させられることになります。これは、柔軟なはずのGoの仕組みを、硬直したOOPの階層構造に逆戻りさせている行為です。

3. データと振る舞いの不自然な結合:
Goはモジュールとして関数を分離しやすいのに、多くの機能的なロジックを構造体のメソッドとして過度に定義してしまいます。結果として、「その構造体なしには何もできない」というOOP的な依存関係が生まれてしまい、モモジュール指向の利点が失われるのです。

結論:呪いを解き、本質に立ち返る

Go言語は、既存の「派閥」や「複雑な慣習」から解放されるために生まれた、非常に合理的な言語です。

にもかかわらず、ライブラリが「OOPの呪い」に囚われているのを見ると、エンジニアの思考が、ツールの裏側にある物理や数式ではなく、流行や抽象化された設計思想に縛られている証拠だと感じます。

わたしは引き続き、Goの真価であるシンプルさ、モジュール指向、データへの明確なアプローチを追求していきます。そして、既存の常識や派閥に惑わされることなく、常に「なぜこの仕組みが必要なのか」という本質に立ち返って、コードを書いていくだけです。

以上、終了。

2025年10月5日日曜日

リニアレール化

 Tevo Little Monsterのリニアレール化を行いました

結論から書きます

やってよかったです

  • 音が静かになった
  • 造形がシャープになった
  • ベッドレベリングの精度が上がった

基本中の基本かも知れませんが

精度を少しずつでも上げていけば

全体の質が上がります

3Dプリンタはまだまだ未完成の領域であるため

ユーザーは自らの手でカスタマイズすることが必須です

それはたとえBambooLabであろうとPrusaであろうと同じです


以下作業の流れです

治具がThingiversrにあったので、それを光学造形のSonicMiniでプリントし、電動ドリルで穴あけとネジ立てし、3ミリのネジで締めまくりです

なんと、光学造形が少し歪んでて、レールが多少斜めになってしまいました

しかし、1ミリもズレて無いので大丈夫でしょう

ファンアダプタも作りました

少し横幅が大きかったので、小さくした部品も作りました

今度何かのタイミングで取り付けようと思います

ZプローブはPeecisionPiezoOriobを使っています

これはピエゾ素子で、ノズルの先端に衝撃が加わると、それを検知します。

つまり、誤差ゼロでプロービングできるわけです。

しかも、スイッチと違い、繰り返し精度もめちゃくちゃ高い物です

わたしは出始めの頃からずーっと愛用しています

また、とっくの昔にマザボはDuet6HCとラズパイ4の組み合わせに変えており、加速度センサーをつけてあります

これでヘッドの急な動きを抑止できます

あと、試しに赤外線センサーのエンドストップを除去し、モーターのストールデテクションを試しましたが、どうも精度がよくありません。

仕方なく、赤外線スイッチに戻しました。

あと、0.9度モーターに変えていたのですが、

どうも脱調しまくりです

カレントを上げればよかったかもしれませんが、

その前にモーターが信用できなくなり、1.8度モーターに戻しました

他にもあれやこれややりまくり、ようやくうちのプリンタも完全復活したと思います

しかし、穴あけとタップは疲れました

接着剤や両面テープで止めてやろうかと思いました、、、