LoginSignup
1

melでアレコレやる際に気を付けてる事

Last updated at Posted at 2022-12-12

mel面白いですよね。

mel色々できますよね。

ただ、場合によっては重大な事故を引き起こしてしまうこともあるので、
自分が後輩さんらに1度は言ったことを幾つか

{ } で囲め

とにかくスクリプトエディタなんですよ。
みなさんスクリプトエディタで書いて、実行すると思うんですよ。
割と危険なんですよ。

例えばこんな感じのスクリプトを書いて実行したとしますわ

    string $qbozHoge[] = `ls -sl`;

    for($i in $qbozHoge)
    {
        print($i + "\n");        
    }

この時、$qbozHoge はglobal変数としてmayaさんに登録されてしまうんですね。
(global変数の確認は env; でできます。)

これの何が問題かというと、

  • global変数さんは1回登録されると型を変えられない
  • global変数さんはglobalなので、他でも使える

という事ですね。

つまり、
万が一 会社で使っているツールのglobal変数と名前が被ってしまった場合

  • そもそもツール自体が動かなくなる
  • 変数にツールが予期せぬ値が入り、深刻なエラーを発生させる。

という考えたくないレベルの面倒が発生します。

スクリプトエディタでmel単発の処理を書く際は {}で囲む 事で変数のglobal化を防げます。

{
    string $qbozHoge[] = `ls -sl`;

    for($i in $qbozHoge)
    {
        print($i + "\n");        
    }
}

自分で書く場合も、他人から貰った場合も
スクリプトエディターでmelを実行する際は気を付けてくださいね。

global procは気軽に作るな

これも理由としては前項と一緒ですね。
global proc は後から上書き定義できてしまうので、作るのはまぁ良いのですが
被りそうな名前(誰でも気軽に思いつきそうな名前)で作ると

万が一 会社で使っているツールのglobal proc と名前が被ってしまった場合

  • そもそもツール自体が動かなくなる
  • ツールが予期せぬ挙動をし、深刻なエラーを発生させる

という面倒が待ってます。

なので、melでprocをバリバリ作ってくときは
global procの量は必要最低限にし、
命名時はなるべく固有になるようにした方が安全ですよ。

UIのパーツ名は被らせるな

これも一緒。
万が一 会社で使っているツールのUI と名前が被ってしまった場合

  • そもそもツール自体が動かなくなる
  • ツールが予期せぬ挙動をし、深刻なエラーを発生させる

です。

最終的にUIパーツ名をつけるのが面倒になったので、 
UIパーツ名は定義せずにそのまま変数に放り込むようにしました。

まとめ

なぜこうも細かいところまで一々指示していたのかというと、

過去に自分が全てやってしまったらなんですね。

ほんとうに面倒でした。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1