Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
この中に1人、素人がいる!
Search
Infiniteloop
August 16, 2023
Programming
0
110
この中に1人、素人がいる!
12月2日に行われたインフィニットループ×クラスメソッド×クリプトン合同勉強会で発表した資料です
http://connpass.com/event/20314/
Infiniteloop
August 16, 2023
Tweet
Share
More Decks by Infiniteloop
See All by Infiniteloop
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2025年版)
infiniteloop_inc
18
76k
俺の PHP プロファイラの話 PHP スクリプトで PHP 処理系のメモリをのぞき込む
infiniteloop_inc
1
640
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
1
950
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
1
1.4k
詫び石の裏側
infiniteloop_inc
0
890
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
7
35k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
280
ADRという考えを取り入れてみて
infiniteloop_inc
0
290
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
220
Other Decks in Programming
See All in Programming
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
450
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
5
1.1k
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
130
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
580
「やめとこ」がなくなった — 1月にZennを始めて22本書いた AI共創開発のリアル
atani14
0
400
AHC061解説
shun_pi
0
390
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
410
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
4
440
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.5k
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.4k
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
190
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
610
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
110
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.9k
AI: The stuff that nobody shows you
jnunemaker
PRO
3
450
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Thoughts on Productivity
jonyablonski
75
5.1k
Docker and Python
trallard
47
3.8k
How to make the Groovebox
asonas
2
2k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
790
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
KATA
mclloyd
PRO
35
15k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
53k
Transcript
この中に1人、素人がいる! ~素人が現場に投入されるとやらかすこと~
自己紹介 名前:桶矢秀人(おけやひでと) 前職:クライアントプログラマ(5年) ・モバイルゲーム開発(C, C++, C#, Java, Objective-C) ・少しの間PHPをかじった IL:サーバプログラマ(1年)
・モバイルゲーム サーバ側開発 (PHP)
皆様は仕事でミスをしたことがありますか?
現場にはまさかのミスをする人がいます
そういう人に出会ったときのための 心構えをしましょう
目次 日常業務編 ・事例1.質問できない ・事例2.小さなことでパニックを起こす クライアント開発編 ・事例3.後先を考えない ・事例4.自分に非があるかもしれないことを考えない ・事例5.サーバは最強だと思っている サーバ開発編 ・事例6.本番の想定ができない
日常業務編
事例1.質問できない
事例1:質問できない(1) 前職でPHPの勉強をする機会を頂いた時の話。 前提 ・PHP経験なし ・当然MySQLもApacheもXAMPPも知らない ・そもそもソーシャルゲームという単語を初めて聞いた それを踏まえて
先輩 「んじゃ、以前運営してたゲームがあるんだ けど、それをローカルで動かして。わかんな かったら聞いて」
事例1:質問できない(2) ・えー...と? 具体的にわかっていないこと ・そもそも「動かす」とはどうなる状態になればいいのか? ・ローカル?これはサーバで動いていたものだよね。自分のPCで 動くの? ・早い話「何からやればいいんですか」と聞きたいが、そんな質問 して大丈夫なのか?
事例1:質問できない(3) ・聞きたい人は別の作業をしていたりでつきっきりというわけでは ない。 ・「PCの電源のつけ方がわかりません」レベルの質問なのではな いかと疑ってしまう。「そんなのもわからないのか」と思われるのが 怖い。 ・聞いたら、すんなり教えてくれる。ただ、「わからないなら聞いて いいから」と改めて念を押される。
事例1:質問できない(4) 教える側の意識 ・「こいつあんまり質問してこないな」って人は意外と質問を溜め込 んでいる。 ・相手側から歩み寄ってくれると非常に質問しやすくなるので、最 初のうちは定期的に声をかけることで質問を吐き出させるとお互 い得する。
事例2.小さなことでパニックを起こす
事例2.小さなことでパニックを起こす(1) ILではない事例(初運営業務) 私の座席の後ろから先輩が見ている。 ・「ログを見てみて」 ・「ステージングに入ってもらえる?」
事例2.小さなことでパニックを起こす(2) ILの事例(配属初日) ・「このプロジェクトはテスト駆動開発でやってます。そんでもっ て――」 ・「バージョン管理はgit使ってますよ、と。あとは――」 ・「じゃあまずは環境構築からやってって。マニュアルはここにある から見てね」
(わ、わかんないです...)
事例2:小さなことでパニックを起こす(3) ・総じて、「できなければやばい」という気持ちから焦っている。 ・必死になってるのは結構伝わるので、察してくれることも多い。 現状できることを探し、手詰まりなら恥ずかしくても聞きましょう。 ・説明してくれてる人が不親切だとか、そういう話ではない。 ・ILが特別厳しいという話でもない(重要)
クライアント開発編
事例3.後先を考えない
事例3:後先を考えない(1) ソケット通信を利用したゲーム開発をしたときの事例。(C++) 前提 ・iOSアプリ開発で、このときで2度目 ・ソケット通信は初経験 ・クライアント1人、サーバ1人の2人での開発(=問題点を指摘す る人間がいない)
ソケット通信部分のソースコード ※ClientSocketはシングルトンクラス int ClientSocket::connection( const u8* ip, int port )
{ if( ( socket_ = socket( PF_INET, SOCK_STREAM, 0 ) ) < 0 ){ return CONNECT_SOCK_ERROR; } pthread_create( &thread_, NULL, threadHook, this ); return CONNECT_SUCCESS; } 事例3:後先を考えない(2)
事例3:後先を考えない(3) ・ソケットを1本しか作れない。ゲーム以外で通信できない ・後でプロデューサーに「チャット機能入れたいな」と言われる。私 ビビる ・必死のロビー活動によってそれを阻止する ・「リファクタリングしてなんとかしよう」という発想は無い
事例4.自分に非があるかもしれないことを 考えない
事例4:自分に非があるかもしれないことを考えない(1) 事例3と同じプロジェクト 前提 ・ゲームサーバに対してゲームデータを送信する ・ゲームサーバはあるAという処理において、1バイトのデータと4 バイトのデータを連結した合計5バイトのデータを要求している
データ送信部分のソースコード(要約) // 送信データの構造体 typedef struct { char a; // 1バイト
long b; // 4バイト } Foo_t; 事例4:自分に非があるかもしれないことを考えない(2)
データ送信部分のソースコード(要約) Foo_t bar; bar.a = 10; bar.b = 20; char*
data = new char[sizeof(Foo_t)]; // 1 + 4で5(?) memcpy(data, &bar, sizeof(Foo_t)); Connection::getInstance()->send(data); // 送信 事例4:自分に非があるかもしれないことを考えない(3)
事例4:自分に非があるかもしれないことを考えない(4) ・この構造体は8バイトになる 理想(5バイト) 現実(8バイト) ・アライメントの機能を知らない。 ・問題なのは、自分のミスを疑っていないこと。先に相手側のミス を疑って攻勢に出る。
事例5.サーバは最強だと思っている
事例5:サーバは最強だと思っている(1) 今回は課金時のエラー処理の事例。 while (true) { char* receipt = getReceipt(); //
レシートを受け取る int status = PurchaseManager::send(receipt); // ポイント追加 if (status == SUCCESS) { break; // 成功したので抜ける } }
事例5:サーバは最強だと思っている(2) ・インターバルもなしに無限に投げるのでさながらDoS攻撃状態 ・後ほどインターバルを入れるように修正したが、それほど深刻に 受け止めていなかったりする ・サーバを担当してからクライアントに同じことをされて、やばさを 再認識した
サーバ開発編
事例6.本番の想定ができない
事例6:本番の想定ができない(1) ・PHPによるソーシャルゲーム開発において、初めて一人で一つ の機能作成を任されたときの事例 前提 ・担当したのはログインボーナス機能 ・ライブラリで吸収してくれているので、自分でSQLは書かない。 楽勝である
事例6:本番の想定ができない(2) 当時の本番サーバの構造(作ってるときは知らない) マスター スレーブ 書き込み(UPDATE, INSERT) 同期 読み込み(SELECT)
事例6.本番の想定ができない(3) 当時書いたPHPのコード(要約) if (!$is_login) { return; } // 日をまたいでいるかどうか $login_bonus->add($user_id,
1); // 1日加算(UPDATE) $days = $login_bonus->get($user_id); //日数を取得(SELECT) $reward->give($days); // その日の報酬を配布
事例6.本番の想定ができない(4) ・報酬が配られた人間と配られない人間が出てしまった。 ・原因は、スレーブの更新が追いつく前にSELECTしてしまったか ら。 ・クライアントからの流れで、書き込んだものを読み込んだら、更 新された値が手に入って当然という認識。 ・ソースコードレビューのシステムがあれば防げたかもしれない。
まとめ
まとめ ・現場にいる素人に対して、「素人だから大目に見るべき」というこ とではない。 ・ただ、それでも現場で、少なくともプロジェクトが続いている間は 一緒に仕事をしなければならない相手でもある。現実として。 ・その人の数少ない強みなどを拾って、足りない部分をなんとかご まかして、使ってあげてください。お願いします。
ご清聴ありがとうございました。