1read 100read
2013年06月WebProg407: 美しいコードのCGIを愛でるスレ (159) TOP カテ一覧 スレ一覧 2ch元 削除依頼
WEBアプリにもっとも適した言語は何か? (106)
WEBプログラマのすすめ (169)
【CGI】合同開発室 (181)
2ch全板人気トーナメントでWebProg板を1位にしよう! (172)
@@Perlチャットでの荒らし対策@@ (175)
ウェブプログラミングで使えるデザインパターン (164)

美しいコードのCGIを愛でるスレ


1 :02/03/19 〜 最終レス :2012/09/30
世の中ゲロンパに汚いコードなPerlのCGIスクリプトが反乱している。
もちろんperlstyle.podに則って自分で書くのも良いさ。
あぁオレはそうしている。
でもな。KENTやレスキューのコードがスタンダードだと勘違いしているやつが氾濫しては問題があるだろう。
そこで美しいコードを誇るCGIスクリプトを集め、皆で愛でようでは無いか。
最低条件
* use strictしてること(-wTは任意)
* 変数、サブルーチン、メソッドには意味のある名前を割り当てていること
* 更新されていること
* 作者と連絡がとれること(メアド、更新されているWebサイト)

2 :
で、まずは >>1 が出すんだろ?

3 :
了解。ちょっと反則かもしれないがSlashcode
http://sourceforge.net/projects/slashcode/
適度に短いメソッドとアプリケーションとしての完成度に好感。
オープンソース物には珍しくドキュメントが比較的充実している。
なによりデータベースのER図が添付されている辺り、
乙女パスタに感動ってな感じ。

4 :
こんどはCGIスクリプトでUseModWiki
http://www.usemod.com/cgi-bin/wiki.pl
オリジナルのWikiはシンプルだが汚い部類に片足突っ込んでるが、
UseModWikiは頑張ってる方。
冗長な部分とちょっと無理してApache::Registry対応した感はあるが許せる範囲。
もちろんmod_perl下ではバカっ早。

5 :
>1
>use strictしてること(-wTは任意)
おれレベルならこんなのいちいち書かなくてもキッチリ宣言してるから
どうやらオマエとはレベルが...

6 :
>>5
そう、オレはヘタレでしょっちゅうミスをする。
自分の作業を信用していないからuse strictする。
そして結局楽になる。
もちろん他人のコードを触る時もミスをする。
でもそのコードがuse strictしてない/したら凄いことになるコードだったら
そもそも手を付けない。

7 :
>>5
きっちり宣言していようが、書いておくべきだろう。

8 :
use strict;?
require './config.cgi';してるからしないよ。

9 :
俺は最近はstrictと-wなしでコーディングなんて出来ないよ。
ずいぶん長いあいだ-wは不要、とか思ってたが、一度有用性に気づくともう手放せないね。

10 :
>>9
同意。
ってこれだけだとあれなんで紹介
Hyper Nikki System
http://www.h14m.org/
基本。
Wing Multi BBS Professional
http://www04.u-page.so-net.ne.jp/yd5/wing/support/
わりとまともな方だと思う
C-BOARD
http://skully.lib.net/c-board.shtml
一応はずせないかなと

11 :
>10
クソサイトばっかり張るなって(藁
管理人の自作自演か?

12 :
なんで -w だと一度だけ出てくる変数が警告されるの?
一度だけ出てくるもの
セットする前に使用されるスカラー変数
複数回定義されるサブルーチン
サブルーチンの再帰が 100 以上
このへんが警告喰らうのも分からん。

13 :
あげとこう

14 :
>>12
一度だけでてくる変数が警告されるのは、typoの可能性があるからじゃないかな?
サブルーチンの再帰が100以上ってのはすごいな。見たことないけど警告したいね(笑)
サブルーチンを複数回定義するんだったら別のものにした方が安全という思想があれば警告すると思う。
セットする前に使用されるスカラー変数にも警告でると思うけどな(笑)
てなかんじですが?

15 :
> 一度だけでてくる変数が警告されるのは、typoの可能性があるからじゃないかな?
typoの意味が分からんかった。googleすると「タイプミスのこと」とな(^^;
なるほど。そういう意味なら納得。
変数のセットする前,というのは my とかで宣言する前,という意味ですか?

16 :

-w 1 度しか使われない識別子、設定される前に使われている変
数に警告を出します。 サブルーティンの再定義、未定義の
ファイルハンドルの参照や、read-only でオープンしたファ
イルハンドルへの書き込みにも警告を出します。 また、数
値に見えない値を数値として使った場合、配列をスカラであ
るかのように使った場合、100 段階以上のサブルーティンの
再帰、その他たくさんの事に警告を出します。 perldiag
manpage と perltrap manpage を参照してください。
なるほど。空の変数をprint とかで呼び出してる場合に警告するのね。

17 :
>>11
いや、自演なんてしないよ。
日本でいいのってなんかある?

18 :
IMGSRCのsite-itとかどう?
http://www.imgsrc.co.jp/

19 :
>>10の評価(適当)
> 1:ttp://www.h14m.org/
システムが巨大すぎて読む気が起こらず。
とりあえずイメージキャラクタが痛い。
> 2:ttp://www04.u-page.so-net.ne.jp/yd5/wing/support/
HTMLが糞なのでダウソしなかった
> 3:ttp://skully.lib.net/c-board.shtml
HTMLが糞なので以下略。

20 :
全部Perlスクリプトのコードとしての評価じゃないな。
まあ、CGIとしてはHTMLは重要か。

21 :
でも、2も3もスキン機能があるんだから、使う側がいかようにもすれば良いんじゃないか?
で、ageとくか。

22 :
ファイルが10枚以下でHTMLがそこそこまともならソース読むぞー。


23 :
美しいコードって、実際どういうコードのこと言うんだ?

24 :
>>23
256行でmpeg4展開。

25 :
>>23
ぱっと思いつくのはこんな感じかな。
*一貫性のあるコーディングスタイル*
 趣味や職場によってかわるが、perlstyle.podに近ければとりあえず良し。
*一貫性のあるインデント*
 インデントすらしてない奴有るんだよね。。。
*メソッドの行数は10行未満が望ましい*
 チョー長いサブルーチンや、サブルーチンにすらしてないようなコードはX
*意味のある名前を使っていること*
 1も出してたけど意味の無い変数名を付けない。
 メソッド名は宣言的な名前を使う。多少長くても問題なし。
*無意味な省略形の名前を使っていないこと*
 ループ内の $i は許そう。
*同じことを複数の場所でやっていないこと*
 コピー&ペーストで書いたコードはこうなってるのが多い。
 ある機能を変えたいときに複数の場所を変えなければいけないコードは×
*Perlの機能を有効活用していること*
 配列の要素を全部舐めるのにCっぽいことしたりしない。mapもgrepも上手く使え。

逆に「こーいう書き方されるとムカツク」ってのは挙げやすそうっすね。

26 :
忘れてた。
*スコープを意識していること*
 my $hoge = 'hello world'
 sub function {
     substr $hoge, 6, 5;
 }
 とか、無駄にスコープを跨いで変数使われたりするとスゲー読みにくくなる。
 mod_perlでヤナ思いするし。

27 :
ゆいチャットのコードが評価される点は「改行を極力減らした」って点だけなの?

28 :
7行でDVDクラック

29 :
っていうか、>>1とか>>25の書いてることを満たしてるPerlスクリプトは、もう無いのか?
>>10で書いたものだけか?
情けないな。


30 :
>>29
人に頼らず、お前が晒せ。

31 :
元ねたこれかな? http://perl.com/pub/a/2002/01/23/cgi.html
非プログラマー向けに、CGIプログラムを探す場合
どういった点を評価するのか書かれているようだけど。
http://nms-cgi.sourceforge.net/

32 :
(´-`).。oO(なんで Perl の時点で綺麗なんてありえないってことに気付かないんだろう・・・)

33 :
(´-`).。oO(Perlでも「マシ」な方のスクリプトを挙げようという趣旨なのでは・・・)

34 :
-wは必須だろ。
まあ、警告吐くモジュールもあるから、本番稼動中は無しにしても、
テストではつけるべし。

35 :
>>32
じゃあなんだときれいなソースできるのかな?
COBOL?FORTRAN?BASIC?ASM?

36 :
スーパーレンタルサーバー誕生!ホームページ作りには当サイトをご利用ください。
http://www.web-free.info
CGI・SSI制限なく使用可能です。


37 :
>>35
Cを敢えて外しているのには何か意図が?

38 :
>>37
そもそもきれいなソースなんかあり得ないから。

39 :
>>38
君の美的感覚は疑わざるを得ない。
とか書いて思ったけど、人によって価値観違うから
あまり強くはいえないよね。

40 :
>>35
「きれいなソース」でCGIを書くなら、RubyかDelphiでしょう。

41 :
いいコードを見るといろいろ参考になるねー。
php もいい?

42 :
コメントのないソースはどんな言語でも糞。

43 :
関数にコメントつけるときは,
その関数がどういう関数なのかという説明と,
引数や戻り値の説明もあったほうがいいのかな?

44 :
>35>40 君達の美的感覚は調整が必要です。 最適解は scheme

45 :
>>44
シロ カワイ先生ハケ-ン

46 :
>>44
何も書かかないのが一番美しい。

47 :
>>46
そのかわり何もできない。

48 :
>>40
Ruby?
( ´,_ゝ`) プッ

49 :
>>40
Delphi厨はマ板に(◕ฺ∀◕ฺ)カエレ!

50 :
きれいなコードを書けているつもりになれる言語だね。

51 :
>>42
コメントに頼りすぎているコードも良くないと言う話もある。
コメントなんぞ見ないでも理解できるコードが最高。
http://www.ogis-ri.co.jp/otc/hiroba/ogisbooks/Refactoring.html

52 :
>>50
普通ソースなんて人に見せるものじゃないから、
自分一人でうっとりしていればいいんだよね。
グループやチームでソース書く必要あるんだったら、
美しさというより、ほかのメンバーにわかりやすい内容で書けばいいのであって、
結局美しさになんの意義も意味もないね。
ソースではなく、完成したものの出力が美しく、処理が機能的であればよいのであって、
ソースが美しいかどうかなぞと言うことは、手段の目的化以外の何者でもない。

53 :
>>52
漏れは、美しさ=わかりやすさだと思うな。
トリッキーなコードばっかり書いてる奴は逝ってよいよ。

54 :
>>53
それを美しさと感じる人もいるけどね。

55 :
http://pc.2ch.net/test/read.cgi/prog/1014722144/4

56 :
一度トリッキーなコードの魅力に触れると
普通にしっかりと書いてあるコードが冗長に見えていかん

57 :
>>54,56
いやぁ、自分で書いて自分でうっとりする分にはいいんだけどね。
ム板のトリッキースレとか好きだったし。
ただ、それを(略

58 :
ほっほー。

59 :
前の会社で、
「あいつのソース、綺麗なんだけど、動かないんだよなぁ〜」
って人いたよ。

60 :
>>59
動かないのはソースと言わない

61 :
なんつーか、死ぬほどサブルーチンだらけのソースはどうですか。
全体の8〜9割がサブルーチン。

62 :
>>61
ああ、そういうのよくあるよね。
最初に
&read
&html
&end
みたいな感じで、あと全部サブルーチンなの。
俺は嫌い。だって重複して使われてるわけでもないのに意味ないじゃん。
しかも読みにくいよ。

63 :
>重複して使われてるわけでもないのに意味ないじゃん。
恥ずかしい。

>しかも読みにくいよ。
恐らく、あなたのソースコードのほうが読みにくいでしょうね。

64 :
mod_perlを使うとき、main()等を設けるほどの几帳面さが役に立つ。

65 :
>>61
>>62
そーいうのが困るんだなこれが。
処理のブロック(固まり)ごとにサブルーチン化して、
やっていることを表す適切な名前を付るのが王道。
コメントつける暇あったら、
サブルーチン化して適切な名前を付けて下さい。
# このへんは「リファクタリング」を見よって感じ。

66 :
>>63
激しく同意。
>>しかも読みにくいよ。
>恐らく、あなたのソースコードのほうが読みにくいでしょうね。
ここらへんが特に。
サブルーチン入れて読みにくいなんて逝ってる奴なんて
長大スクリプト組んだ事無い奴くらいじゃないの?

67 :
なぜサブルーチン化するのか?
何度も利用するからってのも理由の一つだけど、
 - その処理ブロックに名前を付けることで処理内容を予測しやすくする。
 - スコープを狭めることで変更に伴う影響範囲を小さくする。
ってのがあると思う。
スコープを狭めるってのは実は重要で、
これをやっていないコードはある部分を変更したいんだけど
それ以降の(含むそれ以前の)コードにどう影響が生まれるかが
とても分かりにくくなってしまう。
まぁ自分で自分用のコード書いているうちは
こーいう問題にあうことはないんだろうけど。

68 :
自分もサブルーチン作りまくり派なんですが、
細かくしすぎかなぁ感もあって、どこまでやっていいものか。
たとえ2,3行のソースでも色々な場所で使いまわす場合はサブルーチン化したりしてます。
入れ子になってたりもします。
極例ですが下記みたいな流れになってたりします。
自分では見やすいんですが、ちょっと肥大化してる感がいなめませぬ
やっぱ入れ子入れ子にしすぎると処理的に重くなりますか?

----------------下記----------------------------
&a0();
aub a0{
&a1();
&a2();
}

sub a1{
}
sub a2{
a3();
}
aub a3{
}

69 :
a1とかの名前だとアレだけど、
役割がしっかりと分担されてるなら構わないと思う。(俺は)

70 :
俺は長いソースのこと言ってんじゃねーぞー。
30行のソースでもサブルーチン化しちゃうやつが同じクラスにいるー。
大嫌いだーーー!!
普通に書けバカー!読みにくいんだよ!!このサブルーチンヲタが!!
と言い訳してみるテスト

71 :
>70
番号間違ってるよ・・・

72 :
>>71
うるせーばかー!!
しかもな○橋!おめーのソースはなー。最初に
&read
&html
&end
#て書いてるのにその下のサブルーチンの順番があべこべなんだよーー!
sub html {
}
sub read {
}
sub end {
}
#読みにくいんじゃボケー!!おまえとチーム組まされてる俺の身にもなってみろー!
#何がオブジェクト指向化だよん(はぁーと)だ!Rえええええ!!

73 :
>>72
サブルーチンの名前が適切かどーかって話はさておき
順番なんぞ検索すれば良いから重要じゃないね。
viで
/sub name
とか打つだけっしょ?
まともなエディタとそのエディタの使い方を覚えましょう。

74 :
順番は気にした事ないな。。

75 :
&を付けるのはいかがなものかと。


76 :
>72
文脈から推察すると、超初心者のカジリたてって感じ?
プログラミングを理解してないくせに自分の思いこみだけで一方的な自分の意見を
ごり押しする人。
自分のレス番号間違ってることからしてもおっちょこちょいさん。
痛々しいネ!

77 :
endとかってサブルーチン名にできたんだ?

78 :
& はあまり良くないの??初耳っす


79 :
read( )って書く方が普通だべ?
&はオヤジくさい。

80 :
>79
わたしの場合は、必ず & つかってしまうくせがついているが、現にわたしは
オヤジだからOKってことね。安心した。
ただ、すでに関数として用意されている read などをサブルーチン名に使うの
には抵抗があるなー。
ところで & を付けるのはやめたほうがいいみたいなことってなんかの本にでも
載ってるの? たまにそう言う人がいるけど今まで受け流してきたからハッキリ
とした理由が知りたいなー。
なんとなく namazu臭 がするのはわたしだけ?

81 :
Perl5の時代になって久しいが、今時サブルーチンの呼び出しに&を付ける
なんて書いてある本あるのか?リファレンス使うときしか出てこなくないか?

82 :
グラブとリファレンスってどう違うんですか?
サブルーチンにどっちで渡せばいいの?

83 :
>>82
質問は他のスレでやってね。

84 :
>81
今時の本に書いてないというだけのことで、やめたほうがいいということでは
ないということなんだね。了解!
一般関数と区別する意味でも使ったほうがむしろ読み易い気がするのはわたしだけ?
わたしの場合、&をつかわないときといったらシグナルハンドラにセットするとき
ぐらいかな?
ラクダ本には引数なしのサブルーチンは & を使うことで効率がよいとある。


85 :
おまえらラクダ本くらいちゃんと読めよな。

86 :
>&をつかわないときといったらシグナルハンドラにセットするときぐらいかな?
マジかよ。俺が&を明示的につけるのは
・シグナルハンドラの設定
・オーバーロードメソッドの設定
・スタックをそのままで呼び出し(&foo;)
・リファレンスの取得(こりゃ言語的制約だからしょうがないが。)
てな感じだが。
ビルトイン関数はどうせ色でわかるし。

87 :
&が親父臭いって意味がわからん

88 :
perl4っぽいってこと?

89 :
書いても書かなくても変わらない場面では、書いても意味が無いって意味では同意。
おれは書かない派。
(カッコ)も省けるところは省いちゃう派。

90 :
関数やメソッドの名前でこんな風にしとけってのあるかな?
例えば、何かを確認するような関数ならis****にしとけとか

91 :
>90
自分は真偽が返り値になるメソッドをis***にしてる。
あと決めてるのはprintみたく返り値を期待しない関数をdo***とするくらい。

92 :
>90, 91
チョット認識がずれてる部分もあるが、それって今ではオブジェクト指向の
言語では普通にやられていること。
形式としては、動詞+目的語 のような感じ。目的語は省略する場合もあるが、
もしあれば先頭は大文字が一般的。
オマエらをR関数なら killYou とかね。

93 :
>>92
ちなみにPerlではキャピタライズは普通しなくて
$厨房->kill_you()
が普通な。
perldoc perlstyle

94 :
>>93
未熟者め!
$厨房->should_die();

95 :
>>94
あっ、好い返し方(笑)

96 :
>>94
変数に漢字が使えたら可読性が上がるような気がする。(やはり表意文字?)
制御文とかは、むしろ英語の方がいいけど。

97 :
>96
それわかる。
英語力がないからってローマ字で、なんてやってたらすげぇかっこ悪いもん。
今はいちいち日本語を英訳して分かりやすそうなのにしてるけど、英語ができる人から見たら変な単語使ってると思う。

98 :
漢字ですか。タイピング量が爆増するので嫌になったことがあります。
使いたかったらフィルタ通すなりFilterモジュールかませばどうにでもなるからやってみたら?
http://bulknews.net/lib/archives/Filter-Pyuuta-0.01.html
っつっても「どこでもポリモーフィズぅ〜」を目指すと、
何気にジェネリックな名前を付けたくなったりするから、
英語で困るってことは少ないけどなぁ。
異様に長い名前もあったけど(笑)
change_element_with_xml_compiled_object_and_its_state()
とか。

99 :
>>96
コメントだけで充分だと思うけどな、
あと、コメントをローマ字と変な英語のやつ困る、
data number とか、しちゃうやつ、
dataの順番か、個数かわからん

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
無駄なことをして遊ぼう (104)
ワンストップ認証【OpenID,SAML,Live ID, BBAuth】 (137)
一人で始めるWEB起業何が一番面白いかな? 5案目 (137)
PHPでPDF (170)
Perlで電気ストーブを作る方法 (165)
ASP.NET MVC (107)
--log9.info------------------
キヤノンの顔料インクって実は耐水性がない (138)
エプソン PhotoPC Factory F-3200 (118)
【エプ厨必死】CanonPIXUS iP4100part3【最良選択】 (141)
キヤノキチのネットサーフィンの工作を暴くスレ (111)
キヤノキチ束の間の栄華、キヤノン、シェアを大幅に落とす (154)
Linuxで使えるプリンタ/スキャナ (118)
キヤノン新機種発表!買うしかない! (143)
【大量】キヤノンの自動クリーニング【垂れ流し】 (135)
【呪われた】PM-G860【新型ヘッド】 (160)
PIXUS 860i/990i等の従来機種で7系インク使った人 (164)
エプソンPX-G900とキヤノンPIXUS 990i (110)
LP-9200SXユーザー (105)
必見! (162)
【作る】☆☆ 自作インクよ永遠に…。☆☆【創る】 (172)
【RGB】 色彩学とプリンタ 【CMY】 (106)
アイロンプリントについて語るスレ (149)
--log55.com------------------
【サッカー】名将モウリーニョ氏が選ぶ“歴代最高選手”。メッシでもC・ロナウドでもなく…
【ラグビーW杯】<日本より先にアイルランド8強>決勝残り1枠の条件
【宇梶剛士】<家の目の前の多摩川の水位がみるみる上がってきて夕方前には河川敷の野球場2面とサッカー場は水没してしまいました>
【テレビ】<好きな女子アナに異変!>NHK躍進でフジ激減のワケ「女子アナに求められるものが変わってきました」
【テレビ】<立川志らく>TBS系「グッとラック!」視聴率まさかの1%台「現状は志らくさんの辛口批評だけが上滑りしている状態」
【橋田寿賀子氏が怒りの“暴露”】<泉ピン子とえなりかずき“共演NG”>通常なら、大御所と共演NGとなると、芸能界追放...
【サッカー】<英メディア>現役選手からレジェンドと呼ばれた選手を格付けして公表!「過小評価」「過大評価」は?
【芸能】窪塚洋介&小栗旬の2ショット、「GTO!」と大反響