トップページphp
1002コメント237KB

【PHP】2chat開発スレ【2chを越える】 [無断転載禁止]©5ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2016/04/23(土) 13:45:28.79ID:???
【2chatとは】
掲示板とチャットを組み合わせたオープンソースのPHPスクリプトです。
名前の由来は2ch+chat

【特徴】
*基本的な面
ユーザー登録は必要だが、匿名
ユーザーは日付の経過や書き込み、荒らしなどでレベルが上下し、このレベルは通報の影響度などに関わる
管理人が不在でも通報が集まった書き込みは自動削除
チャット形式の為、書き込み上限はなく、テンプレはいつでも誰でも編集可能
板はなく、各スレッドはカテゴリを付けられる為、スレッドを探しやすい
単発スレには向かない

*専ブラ
jsを使い専ブラなしで快適に閲覧出来るUIを提供
WEBで見れるため、PC⇔スマホで開いているスレなどを完全同期できる

*API
誰でも使えるAPIを提供(jsonp対応)
2ch互換のAPIも提供
ユーザーはサブパスワードを作る事で、悪意を持った外部サービス管理人によるアカウントの乗っ取りを防ぐ事が出来る
開いているスレなども外部サービス間で同期可能
0002nobodyさん2016/04/24(日) 09:11:09.09ID:???
現在中核部分を作っています
0003nobodyさん2016/04/24(日) 11:10:56.66ID:???
普段c#でプログラム組んでいるので、オブジェクト指向で作っていく予定です
0004nobodyさん2016/04/24(日) 11:46:44.86ID:???
GitHub作りました
https://github.com/kgtkr/2chat
0005nobodyさん2016/04/24(日) 22:54:01.29ID:???
クラス設計はある程度時間を掛けて行います
PHPは簡単に書ける分、コードが汚くなりやすいみたいですので・・・
0006nobodyさん2016/04/24(日) 22:57:03.03ID:???
まずデータベースに依存しない主要なロジックから考えようぜ
永続化の実装、つまりmysqliなどはまだコードに出なくていい
0007nobodyさん2016/04/24(日) 23:03:15.96ID:???
DBを使った本格的なWEBアプリは初めてなので、そこが悩んでいるんですよね
まだメソッドの中身は書かずに、メソッドの宣言だけを書いてクラス設計を行っています
デスクトップアプリでのオブジェクト指向はある程度分かるんですが、DBを使ったオブジェクト指向が結構難しくて・・・
c#と違ってプロパティがないのも厳しいです
0008nobodyさん2016/04/25(月) 00:00:42.13ID:???
PHPで作るメリットが何かあるん?
Node.jsやPythonとか、他にも候補にがありそうだが
0009nobodyさん2016/04/25(月) 00:15:05.76ID:???
javaは大規模システムでないとメリット薄いみたいですし、c#はLinux鯖だと使えない(Monoはありますが・・・)からです。
そうすると扱える言語はPHPしかないので・・・
中括弧言語以外は苦手ですし
0010nobodyさん2016/04/25(月) 09:23:17.98ID:???
C#からならPHP7で正解じゃないかなあ
とりあえずPSR読んで、それとテスト書く準備しておけばいいよ
001112016/04/25(月) 18:46:27.88ID:???
パフォーマンスとカプセル化を考えたら、Thread has-a Responseの関係はなくした方がよさそう
内部ではフィールドにあるんじゃなくて、Threadクラスのgetterでクエリー呼び出しているんだけど
全て独立したクラスとして考えた方が、良い気がする
WEBアプリはやっぱり難しい・・・
デスクトップなら多少パフォーマンス悪くても、問題ないけど、WEBアプリは大人数で使うからパフォーマンスはやっぱり重視しないとね・・・
0012nobodyさん2016/04/25(月) 20:17:34.90ID:???
パフォーマンス気にするのはリリースしてそこそこの人気サービスになってからにしてくれ
まずは実装ではなく仕様を煮詰めていかないと
ある程度仕様が決まったらフレームワークとか決めてそこから本格的にクラス設計(まさかフレームワーク使わず全部自分でとは言わないよね?)
001312016/04/25(月) 20:29:42.47ID:???
確かにまだ早いですね
フレームワークの予定はなかったんですが、使った方がいいですかね?
PHPでは、APIの提供のみを行い、UIはhtmlとjsのみで作りたいと考えています
001412016/04/25(月) 20:37:28.05ID:???
閲覧中のスレリストやNGリストもサーバーに保存し、APIとして読み込み/書き込みを出来るようにすることで、どのようなアプリでも同期出来るようにしたいと考えています
APIは、XML/JSON/JSONP/2ch互換のdatで提供する予定です
0015nobodyさん2016/04/25(月) 21:44:24.42ID:???
ユーザー登録必須だと興味すら持たれんだろうなあ
読み書きはレベル0のゲスト扱いで参加できるのかな
0016nobodyさん2016/04/25(月) 21:59:23.79ID:???
idとパスワードだけで出来るので簡単に出来ます
redditみたいな感じです
0017nobodyさん2016/04/25(月) 22:04:06.33ID:???
少なくとも気軽に中の様子を伺えないと見向きもされないと思う
idとパスワードだけでもハードルはかなり上がるから2ch越えるのは絶対無理
001812016/04/25(月) 22:48:29.11ID:???
読み取りだけなら認証なしで出来ますが、クロスドメイン対応にする予定なので、認証なしで行うと悪意のあるサイトがこっそり書き込んだり出来るので危険なんですよね・・・
0019nobodyさん2016/04/26(火) 11:57:33.77ID:???
とりあえずSPA取り入れたほうがいい
んでもって認証は後回しの設計と言うか別のサーバとか
プロセスに委任する形にしようぜ
まずはスクラッチとして本体だけの設計で作ってみたらどう?
認証後回しにするってのはそれが阻害する場合があるから
とりあえず作ることによって誰がどんなもののためにどうして必要なのかが見えてくる
ある程度の想定した問題に対応するのはいいとして仮定の問題に固執して対応するのは現状いらんと思うな
アイパスとか個人設定とか細かい面倒なのは後回しにしたほうが楽しめる
002012016/04/26(火) 17:59:11.72ID:???
シングルページアプリですかね?
今はDBと接続するクラスを作っています
多分モデルって奴です
0021nobodyさん2016/04/26(火) 20:14:15.16ID:???
名前空間つけてくれ
002212016/04/27(水) 00:02:44.58ID:???
>>21
C#の使い方と少し違うみたいなので、明日しっかり調べてします
002312016/04/27(水) 00:07:04.34ID:???
とりあえずコミットしました
002412016/04/27(水) 17:31:27.88ID:???
クラス設計終了しました
002512016/04/27(水) 17:33:51.47ID:???
ToDo
・ドキュメントコメント通りの動作をするように、エラーチェックとクエリーを行っていく
・このクラス群をAPIとして提供するためにラップ
・jsでUIを作る
002612016/04/27(水) 18:19:17.43ID:???
PHPのコーティング規約全く守ってなかった・・・
大文字小文字直そう・・・
002712016/04/27(水) 18:26:07.36ID:???
括弧の位置、フィールド名、ローカル変数名、クラス名、メソッド名、ネームスペース名はjavaの規約に合わせて書きます
0028nobodyさん2016/04/27(水) 19:06:13.28ID:???
テスト書いていこう
002912016/04/27(水) 20:03:03.06ID:???
実は今までテストした事ないんですよ
javaとかc#でも色々なアプリ作りましたが、一回もした事ないので何をすればいいか。。
でもWEBアプリなら脆弱性に繋がったりするので必要ですよね
勉強してみます
0030nobodyさん2016/04/28(木) 07:16:10.47ID:???
PHPUnit が有名
FW導入した方がいいよテスト関連も充実してるし
SPAとか使うならそっち関連の導入もあるし
0031nobodyさん2016/04/28(木) 16:55:45.15ID:???
テストは後回しでもいいよ
使い捨てのつもりでいいからとりあえず動くものを作ってまずは1つ完成させること

完璧を目指して手が止まるのが一番まずい
百聞は一見に如かず、実物の試作品があればいろいろと意見も出しやすいし
003212016/04/28(木) 18:01:16.00ID:???
今は中身を書いています
コメントでメソッドの責任は書いたので、あとは実装するだけです
003312016/04/28(木) 18:18:39.80ID:???
メモ
$delete
$attack
$category
$template
$title
003412016/04/28(木) 18:34:56.96ID:???
追記
$not
003512016/04/29(金) 18:14:46.02ID:???
変数の宣言とスコープがないから、いつの間にか上書きしていたりして怖い
003612016/04/29(金) 23:59:23.36ID:???
とりあえずResponseクラス作りましたが、ソースが酷い(特にWriteResponse)ので、privateメソッドなどを使い整理します・・・
あまり長いメソッドだと、変数の上書きなどで、バグが発生する可能性があるので・・・
003712016/04/30(土) 14:10:30.08ID:???
メモ
SHA256を64進数
003812016/04/30(土) 17:36:20.68ID:???
2chでいうIDもトリップも43文字とかいうかなり長い文字列になってしまった・・・
003912016/04/30(土) 17:38:06.14ID:???
パスワードハッシュは43文字にして、IDとトリップは先頭から○文字を切り取る的な事すればいいか
004012016/05/01(日) 00:01:30.60ID:???
名前も目指している機能も似たようなサービスを見つけてしまった・・・
0041nobodyさん2016/05/01(日) 00:10:12.39ID:???
気にすんなよ!!!
0042nobodyさん2016/05/01(日) 11:31:02.55ID:???
どうせ違うものになるから平気
なんてサービスなのさ
004312016/05/01(日) 12:29:06.44ID:???
>>42
にちゃっとるって奴です
0044nobodyさん2016/05/01(日) 12:35:15.36ID:???
>>43
会員制ではないし、idも表示されないやん
0045nobodyさん2016/05/01(日) 12:39:10.92ID:???
というか、認証必須にするのにidを表示するとはこれいかに
匿名にしたいのか、登録ユーザ性にしたいのか、よくわからん
004612016/05/01(日) 14:25:44.88ID:???
>>45
ユーザーから見たら匿名だけど、管理を楽にするためにID制
どのユーザーが書き込んだら分かるのは管理人だけ
本人確認は2chと同じでトリップとID
004712016/05/01(日) 15:04:10.58ID:???
とりあえず、3大クラス(Thread、Response、User)出来たけど、まだ実装忘れとか結構ありそう
とりあえずSQL制約を設定していく
004812016/05/01(日) 15:20:28.63ID:???
AUTO_INCREMENTは1からか・・・
書き直さないと
004912016/05/01(日) 15:37:09.59ID:???
あ、設定すれば0からでもOKなのか
0050nobodyさん2016/05/01(日) 17:21:21.58ID:???
>>46
それはシステム管理者から見たら全く匿名ではないってことだよね
警察とか公的権力が働いたらログを出す義務が発生するんじゃない?
005112016/05/01(日) 21:15:32.10ID:???
>>50
そうなるけど・・・
そっちの方が管理しやすいし
完全匿名でも、普通IPは記録するから、権力が働いたら匿名じゃなくなるのは一緒なのでは?
005212016/05/01(日) 23:06:54.88ID:???
SQL文分からなすぎ・・・
ちょっと複雑な事するとかなり難しくなる
0053nobodyさん2016/05/01(日) 23:08:57.58ID:???
>>51
そりゃ、TCP/IPを使っているのだからIPは記録するさ
でも「原理的に匿名でない設計」と「匿名を目指している設計」は似て非なるものだと思うよ
「表面的には匿名だけど、いつでも書き込んだ主を公開できる準備があるので注意してね」なんて注意書きを書いたらユーザはどう感じるかな
0054nobodyさん2016/05/01(日) 23:38:17.36ID:???
なにいってんだこいつ
005512016/05/01(日) 23:41:41.15ID:???
>>53
IDにLVをつける事によって、通報の多い書き込みの自動削除などがやりやすくなる
今の2ch見ていると、明らかに削除人が足りていないから、出来るだけ自動化したいし
005612016/05/02(月) 00:16:33.73ID:???
responseテーブルが、スレッドIDとレス番の複合主キーなんだけど、管理しにくいな・・・
スレッドに対するレス番じゃなくて、全部のレスに適当に番号振っていった方がよさそう
2chを意識しすぎた感
明日設計見直そう
005712016/05/02(月) 22:28:44.39ID:???
中核クラスは一応出来た
・・・と思ったんですが、javaとc#にincludeがないので、書くのすっかり忘れていました・・・
includeとコメントを詳しく書いたりして、APIを作っていきます

APIはtypeパラメーターに形式(XML、JSON、JSONP)を指定するタイプにします
005812016/05/03(火) 01:01:09.35ID:???
JSON(P)と、2ch互換があれば、XMLいらないんじゃないかと思ってきた
005912016/05/05(木) 09:05:44.80ID:???
クロスドメインでPOSTが使えないので、書き込みAPIの文字数制限がかなり厳しいです
そこで、短い書き込み用のGET、圧縮して送るGET、formタグからならPOSTが可能な事を利用したリダイレクトありPOSTを用意したいと思っています
0060nobodyさん2016/05/05(木) 09:43:28.83ID:???
PHPにクロスドメイン制限なんてあったっけ
006112016/05/05(木) 11:19:03.14ID:???
jsからAPIを使う時用です
0062nobodyさん2016/05/06(金) 13:26:22.48ID:???
>>61
PHPを経由させればいいのでは?
006312016/05/06(金) 17:49:22.63ID:???
>>62
IP記録などで都合がいいので、出来るだけクライアント言語で作りたいと考えています
006412016/05/06(金) 23:23:44.10ID:???
圧縮しなくてもIE以外なら大丈夫そう
長くて6000文字程度だし
IEの2000文字制限がな・・・
006512016/05/07(土) 08:58:18.11ID:???
API完成しました
006612016/05/07(土) 11:54:41.03ID:???
・メモ
タイムゾーン
UPDATE変更の必要なし問題
0067nobodyさん2016/05/07(土) 15:24:21.79ID:???
クロスドメインはいいんだけど
サーバ構成はどんなふうに考えてるとか
サイトマップとかページのフレーム構成とか
どんなふうに考えてるのか見てみたいな
006812016/05/07(土) 17:30:20.31ID:???
とりあえずAPIは出来たので、今クライアントサイドを作っています
Twitter風UIにする予定です
006912016/05/07(土) 20:28:53.36ID:???
返信をどう実装しようか。。
Twitterの場合、TLに返信が色々出てくるんだが
検索速度を考えると、整合性に気をつけてテーブル分割した方がよさそう
007012016/05/07(土) 22:04:18.58ID:???
クライアントサイド難しい…
サーバーサイドは単純作業で、セキュリティにだけ気を付ければよかったけど
007112016/05/07(土) 22:19:37.26ID:???
とりあえず、HTMLとcssのみで、デザインだけ作ってみます
007212016/05/07(土) 22:45:50.93ID:???
色とかが適当だけど、とりあえず骨組み
http://www.dotup.org/uploda/www.dotup.org852825.png
007312016/05/08(日) 00:57:34.98ID:???
JQuery UIという物があるみたいですので、それを使ってUI作ってみます
007412016/05/09(月) 00:53:48.86ID:???
タブのダブルクリック更新出来た・・・
土日ずっとしていたからかなり進んだ
0075nobodyさん2016/05/09(月) 07:30:48.17ID:???
>>1
だからSPAにしろって
今から覚えるならJQueryよりおすすめ
HTMLのView地獄の深みにハマってつらい思いするぞ
007612016/05/09(月) 07:41:01.66ID:???
>>75
ユーザー登録、会員情報の変更以外(つまりよく使う機能)はJQ UI+シングルページで作っています
007712016/05/09(月) 23:27:19.16ID:???
ローカル変数とグローバル関数名の衝突駄目なのか…
$$から始まる関数をJQオブジェクト作成関数にして、$始まる変数をJQオブジェクトにします
007812016/05/09(月) 23:45:45.83ID:???
とりあえずソース整理しないと保守が・・・
jsの設計分からん
0079nobodyさん2016/05/10(火) 00:41:45.00ID:???
>ローカル変数とグローバル関数名の衝突駄目なのか…
そうだっけ
どういうコードなんだろう
008012016/05/10(火) 07:50:47.24ID:???
window.$hoge()なら大丈夫みたいですが、$$hogeの方が楽なので
008112016/05/10(火) 21:16:30.20ID:???
会員登録ページ作ったらサーバーにアップロードします
008212016/05/10(火) 23:59:09.03ID:???
テンプレートエンジンっていうの使った方がよさそう
0083nobodyさん2016/05/11(水) 11:02:28.76ID:???
人の話聞く気ないみたいだからもう何も言わないけど
開発の仕方が5年ぐらい前に流行った開発だよね
ggったらよく出てくる内容だから勉強しやすいのかもしれないけど
特に今年は新しい環境が出揃ってこれからっていう元年に近い年だから
そっちに倣ったほうが楽しいと思うんだがな
それじゃ頑張ってくださいノシ
0084nobodyさん2016/05/11(水) 11:35:03.10ID:???
何しに来たんだ
せめて誘導しろや>そっちに倣ったほうが楽しい
008512016/05/11(水) 16:03:56.63ID:???
聞く気無い訳ではないんですが・・・
すみません
今ajaxが流行っていると書いてあったので、ajaxで作ってみました
008612016/05/11(水) 20:04:05.59ID:???
ネットオウルmysqli_stmt::get_result()が出来ない・・・
0087nobodyさん2016/05/12(木) 02:44:05.11ID:???
個人で作るならES2015+babelで作りたいよなぁ
SPA作るならフロントはReact+redux+react-routerで
ビルドはwebpackで十分だし
Angular2に手を出すのもアリだけど
DOM操作なんて人間様のやる事じゃないのでjQueryは必要無し
サーバーサイドPHPにするんならオレオレじゃなくて有名どころのFW使わないとセキュリティ周りで死ぬぞ
0088nobodyさん2016/05/12(木) 03:01:13.65ID:???
てかajax使うなという訳ではないが
流行ってるってどこに書いてあるんだそんなの
0089nobodyさん2016/05/12(木) 10:13:48.26ID:tNg+7L1I
流行ったのは数年前だろ
DOMで皆苦しんだ
0090nobodyさん2016/05/12(木) 10:37:40.79ID:???
最初から完成品目指しているわけでないならとりあえずこのままでいいよ
一度組み上げてこのままじゃだめだよねと確認して次のステップへ行こう
この場につきっきりでコミュニケーション取りながら教えられる人なんていないだろうし
0091nobodyさん2016/05/12(木) 12:12:53.26ID:???
早く確認できるといいですね・・・
0092nobodyさん2016/05/12(木) 13:23:55.76ID:???
初心者にあれこれ言ったって
形から入って完成しないパターンにしかならんしな
とりあえず動くものを用意して反応を貰うのが一番良い
009312016/05/12(木) 15:51:12.71ID:???
今調べたらajaxが流行ったのって数年前だったみたいです…
SPAアプリだと他のライブラリの方が、保守しやすいみたいですので、色々触ってみます
動く物を見せたいのですが、現在サーバーの審査待ちですので、少々お待ち下さい
009412016/05/12(木) 17:05:14.47ID:???
サーバーサイドは
Angular2+TypeScript+css+htmlで作る予定です
009512016/05/12(木) 17:05:51.17ID:???
ミス

クライアントサイドは
Angular2+TypeScript+css+htmlで書き直す予定です
009612016/05/12(木) 17:46:48.88ID:???
やっぱりvue.vsにするかも
0097nobodyさん2016/05/12(木) 18:18:58.09ID:???
jQueryとajaxをごっちゃにしてそうで怖い
009812016/05/12(木) 18:44:34.33ID:???
タブとかダイアログが簡単に作れるので、そこらへんはJQuery UI使います
また、APIでAccess-Control-Allow-Origin: *を出力して、POST通信でも出来るようにします
009912016/05/13(金) 20:11:58.20ID:???
ソースの整理出来そうな気がしてきた
日曜用事あるから、土曜頑張ろう
010012016/05/14(土) 16:33:06.50ID:???
とりあえずVue.jsで作った
かなり分かりやすくなった
010112016/05/14(土) 16:59:04.14ID:???
スクロール量を取得するサンプルはあるんだが、どのレスまで読んだか知る方法ないのかな・・・
各レスに固有IDつけているけど
■ このスレッドは過去ログ倉庫に格納されています