in other client

はてなアプリケーションエンジニア座談会

アプリケーションエンジニアはどのように仕事をし、どんなことを大切にしているのでしょうか。はてなでは、さまざまなサービスの開発を、複数のチームに分かれて行っています。サービス開発の現場で、はてなブログやはてなダイアリーを開発する「はてなブログチーム」から、id:onishi、id:hitode909、id:shiba_yu36、id:cockscombの4人に話を聞きました。
はてなエンジニア左からid:shiba_yu36、id:hitode909、id:cockscomb、id:onishi

目次

はじめに

本日は、はてなブログチームからプロデューサー兼ディレクターのonishiさん、そしてアプリケーションエンジニア3名にお集りいただきました。はてな社内にはいろいろなチームがありますが、特にブログチームではこのように開発している、という話をお聞きしたいと思います。よろしくお願いします。

onishiこんにちは、onishiです。はてなのチーフエンジニアも兼任しています。

この中で、onishiさん以外でチームに一番長くいるのは?

hitode909僕です。2012年5月くらいから。

cockscomb僕はそれよりも後で、shiba_yu36さんより一瞬早いくらいだったはず。

shiba_yu36ほぼ同期だ。

onishi今ブログチームのエンジニアは、この他にもう1人と、アルバイトエンジニアが2人ですね。

エンジニア、足りてますか?

cockscombちょっと足りないです。

onishi最近、忙しいです。人がいくらいても足りない!

YAPCの発表から、かなり変わった

onishiさんは「YAPC::Asia Tokyo 2013」で「はてなのイマドキの開発フロー」というトークをされましたよね。この中ではGitHub Enterprise(以下GHE)のIssueやPull Requestの活用、Jenkinsを使った継続テストなどの話をされています。

(*YAPCで「はてなブログの開発フロー」について話してきました - 大西ブログ

onishi実は、この発表からだいぶ変わってます。昨日また、大きくやり方を変えようという話をチームでしました。やっぱり開発フローは完成することがなくて、メンバーやチームの状況に応じて変わります。常に変わり続けるのが重要!ということでこの座談会の結論としたいですね。

終わらないでください! どういうタイミングで「変えよう」となるんですか?

onishiうちのチームは自発的に振り返って、「変えよう」という声が日々上がってきます。有機的な組織である! 自己学習している!! とアピールしたい。

と言ってますけど、実際そうなんですか?

hitode909だいたいそうです。日々、仕事していて、先週より調子が悪い、このツールおかしいから変えよう、こういうこと忘れがちだからこうやったらいい……とかIRCで話してて、ツールとか勝手にすぐ作る。

onishiメインの仕事をいったん置いて、そういうフロー改善をやってもかまわない、というチームにしています。なので、そういうことがどんどん起きる!ということを対外的にアピールしたい。

対外的な部分をそこまで意識しなくても大丈夫です。

開発フローが合わなくなると、みんなで声をあげる

同じはてな社内でも、開発フローはチームによって違いますか?

onishiかなり違うかな。プロジェクト管理にRedmineを使っているチームもあれば、Trelloでタスク管理しているチームもあります。

id:onishiid:onishi

ブログチームでは、タスク管理はどのように?

onishiGHEのIssueです。でも破綻しかけてます。YAPCのころはギリギリなんとかなっていたのですが。

shiba_yu36タスク量が増えてきたのが一番大きい原因ですね。Issueがあったら必ず誰かにアサインしてたんですけど、最近は1人50個とかになってしまって、その中で優先度を決められなくなっています。

hitode909飲んでいるときに、みんなが「もう無理だ」って言いはじめて。やり方を変えないとだめそうって、すぐにonishiさんと話しました。

onishi1人20個くらいまでならいけるけど、40個とか50個になると本人も分からないし、僕も管理できない。もともと僕はあんまり管理してなかったんですよ。各自20個くらいなら自分で管理できるから、管理コストはゼロだったんですよね。

変わっていく状況にあわせて、開発フローも常に試行錯誤、ということですね。新しいフローを決めるにあたっては、どのように進めていますか?

onishi具体的な提案を持ってきてもらうことが多いです。で、検討して、それでいこうと。

おもしろ画像を貼る

GHEを使ってPull Requestベースで開発を進めるというフローは、今では多くのWeb企業が導入に前向きですが、自然とそこに辿り着いたんでしょうか?

hitode909みんなもともと個人でGitHubを使ってたし、会社でも使えるならそのまま使いたい、という話になった感じです。

shiba_yu36最初はフロー関係なく、とにかくGHEを導入したいという気持ちでした。検討していたころは「どこどこがGHEを導入した」という記事が話題になりはじめてて、特にどこかを参考にしたわけではないけど、1年くらい経ったら他の会社と同じような結論に至ってました。

hitode909コードについて簡単に話せるのが良い。

onishiしかもそれが残るのがいいよね。

shiba_yu36行ごとにコメントを書けるのも良いんです。アルバイトからコードレビューしてくださいと言われたとき、それまではファイルを送りあったりしてた。

hitode909コメントに画像を貼れるので、おもしろ画像を貼ったりしてます。

onishiそれも良い。

hitode909LGTM.inっていうサイトをよく使ってます。「良いと思います(Looks Good To Me=LGTM)」と言いたいときに貼れる画像が集まっているサイトです。

shiba_yu36でも、たまにイラっとする画像があって、あんまりむかついたら消してる……(笑)

hitode909今それが一番問題になってる。

cockscombこれ怒ってるのshiba_yu36さんだけかもしれない。

shiba_yu36僕だけだと思います(笑)

onishiたしかに貼られたらイラっとするのはある(笑)

cockscombLGTM.inは、はてなスペースのチームから輸入したんですよ。

onishiGitHub用のブックマークレットもあって便利ですね。

ペアプログラミングと「アサインおみくじ」

日々の開発についても少し教えてください。例えば、ペアプログラミングはどれくらいやっているでしょうか。

onishi一応、ペアプロは義務にしているけど、毎週必ずやるっていうほどでもないかな。

hitode909でも最近、ペアプロちょっと流行ってます。みんな、飽きてきたらペアプロをやる。

id:hitode909id:hitode909

onishi気分が入れ替わる、みたいな効果があるのかな。

cockscombつらいタスクをやるときに良いですね。

onishiもともとペアプロは、エクストリーム・プログラミング(XP)のプラクティスのひとつですが、普段からどんどんやったらええやん、と導入したんです。確かに、集中力が持続してコードの質が上がる、などの効果もあったし、重いタスクをやるきっかけになるとか、開発環境が整備されるといった効果も出てきました。

hitode909詳しそうな人をつかまえてペアプロしたり。

onishiアサインおみくじ」というものを導入して、アサインをランダムに当てるようにしたんです。結果、そのコードに詳しくない人がアサインされたりする。仕方がないから、詳しい人をペアプロ相手として捕まえてコードを書く。

アサインおみくじ! タスクの担当者を選ぶおみくじがあるんですか?

hitode909僕が作りました。あるタスクを誰がやるかを、どう決めるか……という問題があって。

cockscomb最初はonishiさんが決めてたけど……。

hitode909どうしても属人化していく。このタスクは誰々が好きそうだからやってもらおう、みたいな。そうなると、そこのコードはその人しか分からなくなって良くない。毎回いろんな人がやった方がいいだろう。そうなると、おみくじしかない。そう確信して、10分くらいで作りました。

onishiいろいろな施策が絡み合って、相乗効果を上げていますね。ときにはチームのメンバーが入れ替わったりもするので、属人化すると良くないですから。

hitode909最近onishiさんの能力が増してきて、狙ってこの人に当てる、みたいなことができるようになってる。

cockscombいやいや、目押しできるはずないです(笑)

エンジニア以外もGHEに入ってくる

少しベタな話で恐縮ですが、チーム内のコミュニケーションの話も。口頭でも話したりしますか? 以前、「はてなは会議室以外では会話禁止」という誤解が広まったことがありましたけど。

shiba_yu36それ自体は誤解だったけど、半年くらい前はブログチームでは、集中が途切れるからGitHubで非同期コミュニケーションした方がいいじゃん、という状態でした。でも最近は、その場でパッと話し合った方が、困ったことを他の人も気付けていい、となりつつあります。

id:shiba_yu36id:shiba_yu36

cockscomb意識してやっているわけではないんですけど、結果的に今は口頭が流行ってますね。

shiba_yu36僕の中でGitHubはすごく便利で、コードのレビューはやりやすいけど、誤解を生むことも多々あると思ってて。文字だけじゃ全然伝えられないんですよ。こっちのコメントに対して、相手が「えっ」て思ってるかもしれない。「これはこうじゃないんですか」という言葉が、怒ってたり、非難してるように見えてしまうことがよくある。ちょっと気になってることは、本人をつかまえて直接話すようにしています。

口頭の方が良い場合は口頭で、GitHub上での方がよければGitHubで、という感じですね。そういえば、エンジニアだけでなくデザイナーともGitHub上でやり取りしているんですよね(参考:座談会デザイナー編)。

cockscombそうですね。デザイナーさんもGitHubをガリガリ使ってて、全然問題なさそう。

shiba_yu36GHEを導入してから、デザイナーさんとのやりとりが楽になったんです。新機能を作りましょうというとき、Issueがひとつあって、エンジニアがコード書いて、「じゃあここからデザインお願い」って言うと、デザイナーさんがそのままIssue上で作業して、みんなで見て……という。全部、時系列で見えるのがやりやすい。

cockscombGHEで垣根なくコミュニケーションできてて、はてなのデザイナーすごい。

onishi最近はユーザーサポート担当もGitHubを見てるし、直接Issueを立てるようになってますね。

Web企業だとデザイナーもGitHubで、というのは増えてきてると思いますが、ユーザーサポートまで使ってるのはすごいですね。エンジニア以外の方がどんどんIssueを立てるという運用で、困ったこととか、少し感覚が違うなどの問題は起きませんか?

hitode909感覚のズレは今のところないです。

onishiエンジニアにうまく合わせてくれていますね。企画担当ともGitHub上でやり取りしています。

エンジニアが使いやすいツールに、他の職種の人もどんどん入ってきているわけですね。

onishiただ一方で、社内では「はてなグループ」を長年使っていて、何かあれば社内グループにどんどん書いて残していくという文化だったんですけど、最近はGHEが便利すぎて、グループを検索しても情報が得られない、という問題も出てきてます。この辺りはもっとうまくやりたいですね。

テストとコードレビューを大切にし、サービスをどんどん進化させる

そのほかに、ブログチームで大切にしていることはありますか? 例えばテストについて。以前hitode909さんが「テストは書きすぎるくらい書いた方が良いと思う」とブログで書かれていましたね。「人間は手抜きするから、執拗にテストを書こうって言ってると、自然とそれからちょっと下がったくらいの品質になる」という話は面白いなあと思いました。

shiba_yu36テストを書かないと怒りますね。

hitode909テスト、書きすぎるくらいじゃないと怒る。

onishiテストは重視しています。テストディレクトリが、プログラムのディレクトリの倍くらいの行数になってます。書きすぎるくらい書いた方が、長い目でみたときに開発効率は上がってると思うし、それがユーザーさんのためになると思うんですよね。

cockscomb書きすぎるくらいテストを書いていないと、コードレビューが通らないので、そもそもリリースできないです。

コードレビューの話も出たので、そちらの話も。

hitode90914時からレビュー時間にしています(編注:はてなは13時から14時までがランチタイムなので、14時は「午後の始まる時間」に当たる)。すぐたまってきちゃうから、1日1回やろう、みたいな。

「コードレビューこわい」という人もいたりしますが……。

shiba_yu36レビューされてバグが発見されるというよりも、レビューされるようになって、「見られるから、ちゃんと書こう」という意識が高まった、という方が大きいです。忙しいから良くないコード書いちゃうみたいなことが昔はあったけど、それだとレビューが通らないから、ちゃんと書こうという気持ちになる。レビューはとても良いですね。

なるほど。ところで、はてなブログはどんどん新機能を出していますよね。

onishi毎週出してます。93週連続リリース中です!(編注:座談会の時点で)

hitode909新機能を毎週出すのが前提になってて、文化になっています。

onishiサービスをどんどん進化させていこう、という思いがあります。はてなのサービスは、ユーザーの要望に応えて進化する。そういう期待を持っていただいてると思うんです。その期待に応えていきたいですね。

個人でサービスやアプリを作る場合と、はてなのサービスとして作る場合とで、意識が変わる部分はありますか?

hitode909同じものを作るにしても、はてなとして作るときは、より多くの人に使ってもらうことを意識します。いろんな人が使うものだから、ちゃんと使いやすいものを作ろうと。個人だと妥協してしまうところでも、はてなとして出すときは妥協しないように。

「楽したいから、めっちゃがんばる」

そのほか、最近新しくやっていることはありますか?

hitode909LGTM.inですね。最新ツール。

それはもういいです……。

shiba_yu36細かいものだと、Jenkinsのテスト結果をIRCに投稿するようにしました。通ったら【朗報】、落ちたら【悲報】って書かれます。

分かりやすい。

onishi今日は悲報多いなーとか。

今日の話を聞いていても、メンバー個々人が「良くしよう」というモチベーションを高く持っているように感じますね。

hitode909悪いままだとずっと悪い。良くしたいです。

cockscombそもそも自分が便利になるためにツールを作るのは面白いです。

onishi開発ツールもそうだし、はてなブログというサービス自体も、僕らたくさん使ってますしね。

働き方という面では、皆さん、けっこう早く帰っている印象があります。

onishiブログチームでは、8時間で9時間分の仕事するために、開発効率どう上げるか考えて、開発フローを効率化したほうが良い、という考え方で仕事をしています。

shiba_yu36昔、残業したら次の日に効率が落ちて。そういうのは良くない。チームでも、仕事が終わってないから残業しようよ、みたいな雰囲気は無いですね。

onishi特にはてなは、今日やると翌日大きく効果が出る、というタイプの開発ではないことが多いので。1~2時間でも多く働けばすごく良くなるとか売上が上がる、みたいなものではないですし、継続的に良いものを作るしかない。そうなると、無理して残業してもしょうがない、というケースが多いんです。

cockscomb8時間で、異常な効率で、異常な速度で開発するの最高、というのがブログチームですね。

id:cockscomb

hitode909最近はもう毎日なにかしらリリースしていて、これは今日中に出したいから速くやろうとか。

shiba_yu361日3回とか。デプロイするコストがほとんどないので、どんどん出す。

onishiホットデプロイの環境があるので、ユーザーさんにも迷惑を掛けないで済みます。

cockscombまとめてリリースするとおかしくなるし。

onishidiffが1万行たまったら、そろそろ出さないとやばい、みたいな。

cockscomb1万行を超えると、一気に変えたら絶対おかしくなる。

shiba_yu36ユーザーさんに不具合を出したくない、という気持ちでやってます。

onishiみんな意識高いよね。できればサボりたいみたいな人が1人いると崩壊しそう。

cockscomb楽したいからめっちゃがんばる、という感じです。

shiba_yu36それはある。

どんどん改善してくれる人に来てほしい

では最後に、はてなへ入社してほしいのはどういうエンジニアですか、という質問で締めたいと思います。

cockscombおもしろいことをしでかしそうな人に来てほしいです。

shiba_yu36ブログチームは、はてなの中でもけっこう独特な感じで、業務時間中に突然、別のことをしたりしてる。さっき言ったツールの改善とか。なので、普通に仕事をしつつも、これは嫌だと思ったところをどんどん改善してくれる人だとうれしいなと思います。

hitode909突然コメントにおもしろ画像を貼ったりするので、嫌な顔せず一緒に貼ってくれる人がいいですね。

onishi今日お話しした、スピード感のある環境に飛び込んでみたい人をお待ちしています。技術スキルももちろんですが、Webサービスが好きな人、新しい技術やトレンドに興味がある人、コミュニケーションスキルのある人、どんどん発言する人ですね。ぜひ一緒に、はてなで働きましょう。

ありがとうございました。

この職種の募集を見る

キャリア採用:Webアプリケーションエンジニア新卒採用:Webアプリケーションエンジニアアルバイト採用:エンジニア


社員インタビューへ戻る
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwuWkJouiauBbTw9
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCXqqXoXiuiVT08dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=okkFCYkY8FCSMNtNSN0S
Better site: ProxyBot webproxy https://proxybot.cc/b?q=1118uXUkFkTu8s6oSTkUuSMy0S
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCXqqXoXiuiVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCXqqXoXiuiVT58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2nk81XqXTuaXk86FUS1XqXShO-NhLO-hLO-hO-NhL8-h5thO-NhLO-hL9hO-NhLO-hDMhO-NhLO-hDO-hO-NhLO-hLO-hO-NhL8-h5V-OhO-NhLO-h5ghO-NhLO-hDNhO-NhLO-hDO-hO-NhLO-hLO-hO-NhLO-hDO-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCXqqXoXiuiVT98dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCXqqXoXiuiVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCXqqXoXiuiVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2jk6o6X8s6oSoCVidkiVnXiVWCXVConXnXVo6CFXid6VYk7VI6FBjuFUSFS39t5tppN8uTX
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCXqqXoXiuiVTy8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCB8dnoYvsknuU6FXuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCBVBTkiqXiUVT98dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCBVBTkiqXiUVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=CFjki1XYaiuB8jY6UBT6n8s6oSBukFsdSYkjuYSBCBnkXikjYu
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCBVBTkiqXiUVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2nuQiXrCu8IFS6BrkSrCuBnX6iBSgM53SuQTFuBBX6iVFuUCYXuFuVs6iaXnX6iiuYYuHnFXwLisXuiB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2TY81XqXTuaXk86FUS1XqXSLYIFuaOf-kCP6sqB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=tNNNoU8PTSttN599S
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2UY81XqXTuaXk86FUS1XqXSx-6qqkXa6
Better site: ProxyBot webproxy https://proxybot.cc/b?q=7kFCT6i8jY6Ut398IsM8s6oSjY6UVuinF7VtMt9y8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCBVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCBVT58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2CiY6sqQd98s6oSWXau6BSBdkFuaVMt3390M
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2uPPu81ujYX68PTSFkiqXiUSs6oTCnuFSsoT7USMNt5N3Nt
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2BusFunduinkX8sYCjS1TVs6inuinSnduouBSUFkTduiuSI6inBSI6inVk1uB6ouSI6inBSI6ink1uB6ouV1ujI6in816IIMHWw98g8N
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCBVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCBVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=1118MtdCj8s6oSFCSWXau6SCTBqXFn
Better site: ProxyBot webproxy https://proxybot.cc/b?q=IkTT6Fi8ouSFCStNgypN33Sb-CiXBdG-uuiBVODFCnkYOb-CiXBdouinO8-6FOV-kaa7BO4-XFY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXXBCoXiui8dnoYvsknuU6FXuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXXBCoXiuiVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXiiknVT08dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwskBnXiUJBd7JIXFBnJnXou
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwt5J7ukFJkikYJXinuFFksXkYJo6iBnuFJs6sqJWBJBokYY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXiiknVT58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXiiknVT98dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwuBXXin7oXiui
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXiiknVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXiiknVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwt5JWC6nXkknJn7nhR-3hD0nJBCXdqCBBk
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118YXiquaXi8s6oSYuUkYSTF6IuBBX6ikYVs6ooCiXn7VT6YXsXuBHnFqwYukFiXiUVn6TXsBOI66nuFVs6ooCiXn7VUCXau
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwuXJokdaCJBXBhR-3hL9hR-3hL9i
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2IF8o81XqXTuaXk86FUS1SXiauQ8TdTHnXnYuwc-inuFaXnbkoTlksnX6iwuaXn
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXiiknVTt8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTf993Ss6inuinShO-ghLNhp9hO-ghLphD0hO-yhLV-hL0hO-yhpR-hpMhO-ph53hDV-hO-yhD5h5MhO-3h5MhD3hO-3h53hp8-hO-3h53hLyhO-3h53h5DhO-3h53h50hO-3h5MhL3hO-3h5MhDthO-3h53hDR-hO-3h53hp0hO-3h53hLDhO-3h5MhDyhO-3h53hDR-hO-3h53hp3hO-3h5MhDp
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwuPksCYknX6i
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwuQnFuouJs6sq6Ya
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2IE8y58s6oSIoYSETrXsduSHT6BnaknuwMNMtNtN3OMNMtNttN
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkWkVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwoknCFuJkikY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkWkVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkWkVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Bq7Tusd8s6oSFuT6FnSsFuknuStpgtNMMt
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Xn81XqXTuaXk86FUS1XqXSR-6inukOaXOb-61uBdXuq
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118U66UYunkUokikUuF8s6oSiB8dnoYHXaw4-G-l-Vv-R-l-yMv-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkWkVTt8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwuj6i7BJTdknJj66n7JBnFuunJd66quFBJd66qXiUJjudXiuJXiJkYYu7B
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118YXiquaXi8s6oSYukFiXiUSn6TXsBS1ujVauBXUiHnFqwYukFiXiUVn6TXsBOjF61BuokTOYXiq
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwuQnFuouJUkiUjkiU
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkWkVTy8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkWkVnuXiX8dnoYvsknuU6FXuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwqkFWkXiuiJnuXiXJTXYYC
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkWkVnuXiXVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=nkXki8UkiPX8s6oSBsX6iVQjS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkWkVnuXiXVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2QQQ8BTFuuu8TF6StNt00p0S
Better site: ProxyBot webproxy https://proxybot.cc/b?q=276CFjXnn6FFuinM8s6oSn6FFuinStN5y9p9pSTYk7j67TYCBVtgVNgVtgVquYBXVBdk7VUkFauiV6IVBusFunBVQQQVtN5NTVoT9VqnFits8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118U66UYunkUokikUuF8s6oSiB8dnoYHXaw4-G-l-Vv-R-l-yMv-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2o8y58s6oSsrSdCkiUdkXi7STWuO9ptgO0S
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2uPPu81ujYX68PTSFkiqXiUSs6oTCnuFSsoT7USMNt5Ngt3
Better site: ProxyBot webproxy https://proxybot.cc/b?q=1118BVsCnu8s6oSs6inuinBSBoPONNtS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkYXXWXn8dnoYvsknuU6FXuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2nuQiXrCu8IFS6BrkSnkUBSTYkXinuQSHnFXwO-is6CFBbkoTlY6iUCuCFauTkUuwty
Better site: ProxyBot webproxy https://proxybot.cc/b?q=1118kssUa8s6oS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSnFkXiSBUonaSMNtNtNM9
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81kW8nWSksnFuBBf5Npgy
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwq6FqqkFXnJoCakBBk
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkYXXWXnVT58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2I6FCo8sndB8IFSWXu1I6FCo8TdTHIwt3bkoTlBXawgkgM3N0k3NIgygt9tjgutg3ususauMIj
Better site: ProxyBot webproxy https://proxybot.cc/b?q=kFn6I1kF8FCSBSBduFjkq61OBOkS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2nuQiXrCu8IFS6BrkSnkUBSskFksnhR-3hL5FuS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwnduJPkTkiuBuJWXTJnCju
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwnXCqqkJWuihR-3hL9PhR-3hL9JnuXiXJjY6iaX
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkYXXWXnVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwqkYkWuFqq6
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkYXXWXnVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=76iUEd6C8UkiPX8s6oSdkXQCkiS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFXinkYXXWXnVTp8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwqkFWkXiuiJWXnnC
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwoknCFuJUYkBBuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwoknCFuJBnFXT
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSkskauoXsS6nFqBSMNtMtNNM
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkBqkkik8dnoYvsknuU6FXuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkBqkkikVT08dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=di8PX1C8s6oSuBISYXBnVratgMN5yVri0My3t8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkBqkkikVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2uPPu81ujYX68PTSFkiqXiUSs6oTCnuFSsoT7USMNt5N0ty
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwo6oJ6YUkJXiBuoXiknX6i
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkBqkkikVT58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkBqkkikVT98dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwkoknuCFJ1XIuJdCUuJXinuFFksXkY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkBqkkikVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkBqkkikVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2IF81XqXTuaXk86FUS1SXiauQ8TdTHnXnYuw2-T6FnOZd6o6i7oXuAbkoTl6YaXawt3M3NNM09
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwjFCnkYJkBXki
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwo6nduFJdkiaP6j
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSkskauoXsS6nFqBSMNNptMMy
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkBqkkikVTy8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2IF8o81XqXTuaXk86FUS1SXiauQ8TdTHnXnYuwb-6FnkXYfLindF6T6Y6UXubkoTlksnX6iwuaXnbkoTlBusnX6iwN
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiBqkYkXiui8dnoYvsknuU6FXuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwjkkFXJoXqq6
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiBqkYkXiuiVT08dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2skYYjksq8y58s6oSkinXj6nSWuFXI7s6auHBuFXkYc-aw3tg9yk5kj9j0jgjyjjaMp9t5N0ap9tpMON0k0ktMs50us950s5uayN30sssu3a9ysbs6auwMMbBXUiwyguNINaI055Ipk5tgggtsNgkNNIps9uMbikouBTksuwdCkiU7uYXBnTsbCFYwdnnTh3LhM8-hM8-XiI6y8y58s6ohM8-BdhM8-jk6QXkiIC1ChM8-h38-IF6oh3V-UkiPX
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiBqkYkXiuiVT58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwnuXiXJd6o6JiCqqCk
Better site: ProxyBot webproxy https://proxybot.cc/b?q=nkXskiU8U6iUPXk68s6oSnXkirX
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwoCBnknJnuXiXn
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiBqkYkXiuiVT98dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=TCFuY6YXVduinkX8Q7ESnkUS6FUkBoVXiVY6YXnkS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2skYYjksq8y58s6oSkinXj6nSWuFXI7s6auHBuFXkYc-awak33sjjN0ta3kMyugpytu0j33Ikpj09IOsMNypsps5Nyu9y9NpMau5gspugspIN53bs6auwMtbBXUiw33ka0yu3ytjukpgI9Nu059ukgNk9k9atbikouBTksuwdCkiU7uYXBnTsbCFYwdnnTh3LhM8-hM8-XiI6y8y58s6ohM8-U7hM8-TunhM8-h38-IF6oh3V-UkiPX
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwqXXikq6CYCJn7nnhR-3hD0
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiBqkYkXiuiVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2IF8o81XqXTuaXk86FUS1XqXSR-dXohR-3hL5FuBOZFuWCuA
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXS8-kFOakFFXU
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiBqkYkXiuiVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwnuuiJBXBnuF
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiBqkYkXiuiVTp8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=kW8kW98Q7ESq1ST6FihMNs6oTXYknX6i
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwoknCFuJkikYJIXiUuFXiU
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiBqkYkXiuiVTt8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwsCsq6YaJIuoa6o
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiUkXBnkWkikVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=BuQIXYoBnCju8s6oSiYSTSBnuT
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2uPPu81ujYX68PTSFkiqXiUSs6oTCnuFSsoT7USMNtpN9N9
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2IF81XqXTuaXk86FUS1XqXSb-kCYOb-XuFFun
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwqhR-3hL9BXJd6CBCXdXi
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSdukYndskFuSFqiX7SMNNpN9MM
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2IF8o81XqXTuaXk86FUS1XqXSDkBBuOhR-3hLpYusnFXrCu
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkiUkXBnkWkikVTt8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSiknCFuSCq7jESMNN5NpN9
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwnuXiXJTXnqhR-3hL9nJBCqkn
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkink8dnoYvsknuU6FXuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwokauJn6JuknJ61iJsCo
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwsCoJ6iJYuknduF
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkinkVT08dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwt5JTkFn7
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2uPPu81ujYX68PTSFkiqXiUS6ssCTknX6iSqBn7uSMNtNN9M0
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkinkVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwUY6F7d6YuJdCBnYuFB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2TY81XqXTuaXk86FUS1XqXS4-FkiaOb-FXQOv-XuYqXuPODF7nkiXXOikOhR-yhDDChR-yhDR-YCOMNtp
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkinkVT58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFCiqqkCBVTp8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkinkVT98dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwskouF6iJaXkE
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkinkVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSs6oTCnuFSBFCiaSMNt5NyMp
Better site: ProxyBot webproxy https://proxybot.cc/b?q=BkYuB8WUnFq8s6of5NSuiSsknkY6USx-XBn6FXskYVaFkokhMtS9MN03S
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkinkVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSkCn6o6jXYuS7odajSMNtNNtN9
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSkskauoXsSPqnqPSMNtyNpM9
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkinkVTt8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2au81XqXTuaXk86FUS1XqXSx-uiFXOH-XuCQnuoTB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118i7nXouB8s6oSBYXauBd61SMNMNStMSNpSFukYuBnknuS1dknV76CVUunVI6FV9NNNNN8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSYXIuSqPPniSMNttN3N9
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFknBkBnCBVT08dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwTXBBkkJBCCdCi
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwXB6nnXBBXnJoCoo6
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFknBkBnCBVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwYksnknXiU
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFknBkBnCBVTM8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFknBkBnCBVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=o6uXoU8iunSt9gMg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwd6nJo6oJXBJBnCsq
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFknBkBnCBVTt8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwoCoo6JYXdkWk
Better site: ProxyBot webproxy https://proxybot.cc/b?q=kW8kW98Q7ESWSfSSkiXWX8Q7ES33y0N
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2IF8o81XqXTuaXk86FUS1XqXSR-kXBBuOahO-Mh5NhpphR-3hLpTkFUiuOLFuik
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFknBkBnCBVTy8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSjCBXiuBBSqkXquSMNtMNMMy
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkqkBnkPknkF8dnoYvsknuU6FXuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwUuFokiJoXYIJFukY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkqkBnkPknkFVT08dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwdCokYkXiuiJhR-3hL9XnXbTwt
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118U66UYunkUokikUuF8s6oSiB8dnoYHXaw4-G-l-Vv-R-l-yMv-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSuiUXiuuFXiUSqqPBdSMNMtNMM5
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkqkBnkPknkFVT38dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=dk7kjCBk38Msd8BsSnuBnSFuka8sUXSiu1BSnuBnSFuka8sUXSiu1BSt0tM59MMNgSt5p
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkqkBnkPknkFVT58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=s6T7okn6ou8jY6U8IsM8s6oSjY6UVsknuU6F7V9598dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2jk6o6X8s6oSnkUSw-CkiUVG-8uTX
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwWkXo6JnXXiuuqBX
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSBukFsdSHrwYC6ii6YYXBunJnXBBXn
Better site: ProxyBot webproxy https://proxybot.cc/b?q=211181ujYX68PTSFkiqXiUSaXkYusnSqBjPnSMNt5NtN5
Better site: ProxyBot webproxy https://proxybot.cc/b?q=uF6UkE6Coki8iunSkFsdXWuBSnkUShu3h5Mhjghu3h53hj3hu3h5MhkIhu3h53hka
Better site: ProxyBot webproxy https://proxybot.cc/b?q=0T6Fi8ouSIXSFkqkBnkPknkFVTg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2dknuiks6FT8PTSFusFCXnSXinuFWXu1SdknuikuiUXiuuF