Summer Internship 2019 @ Recruit


「Recruit Internship for Specialist 2019 -ENGINEER/DATA ENGINEER-」に参加してきました。

きっかけ

「リクルートのエンジニアインターンはいい」と聞いたので参加することにしました。

色々見ていると、インターン生に要求されるレベルが高いことがバンバン伝わってくるので参加したらかなり成長できるなと感じた点が大きいです。

選考

基本的な流れは ES -> コーディングテスト -> 人事面接 -> 最終面接 だったと思います。

ESはフォーマットが決まっていたので、時間をかけてちゃんと書きました。辛かったです。

コーディングテスト

CSの知識を問うものからSQLやアルゴリズムの問題がありました。一度使ったことがあるプログラミングテストツールで安心した記憶があります。

面接

人事面接は、作ったアプリについてや趣味など一般的な面接でした。大阪からWeb面接で受けました。

最終面接は東京本社に受けに行きました。詳細は控えますが、今までに受けたことがない形式で楽しかったです。開発アルバイトの実務経験が役に立ちました。

内容

実際に参加する前に、事前面談といった形でどういった案件に参加するかの説明がありました。ESでは「Androidエンジニアとしてやっていきたい」「ソフトウェアアーキテクチャや設計について学びたい」と書いていたので、インターンではモバイルアプリの開発に参加することになりました。ちなみに、参加後も定期的に「やりたかったことをやれてるか?」みたいな質問があるので、案件が合わないなと思っても後から調整してくれるみたいです。すごい。

僕が所属したのはリクルートライフスタイルでじゃらん(にゃらんが可愛い)などのサービスを開発している所でした。

取り組んだこと

具体的には、●●●に●●●を●●●ため●●●を用いてスクラッチで開発するといったことをしていました。●●●に触れるのは初めてだったのでキャッチアップが大変だったのを覚えています。

LT

インターン期間中に社員の方とインターン生が参加するLT会が2回ほどありました。

僕はLTをしたことがなかったのですが、せっかくの機会なので初LTをしました。趣味でやっているMinecraftマルチサーバについて話しました。比較的評判が良かったので嬉しかったです。今後も機会があればLTやっていきたいですね。

過去の参加記を見てるとTシャツとか貰えたみたいですが今回はありませんでした。残念。

ランチ

インターン生には一定額ランチ代が設定されているようで、チームの方に「こんな人と話してみたい」って投げるとシュッとランチが設定されます。すごい。

Androidエンジニア、Backendエンジニア、Mgrなど様々な方と話すことができました。これがめちゃくちゃ面白かったです。

感想

僕がいたのは比較的少人数なチームだったので設計について議論しながら実装できたので非常に面白かったです。また、日頃はAndroidやKotlinしか書いていないので他のフレームワークを使うのは非常に新鮮でした。

また、インターンランチで様々なロールの方にキャリアについて話を聞けたことで自分のなりたい将来像がかなり明確になりました。

この将来像をベースに、どういったキャリアを進めばいいのかを考えれるようになったのは大きな収穫でした。

また、リクルートは部署によってかなり雰囲気が違うみたいなので、そういった雰囲気を知れればよかったかなと思いました。

学んだこと

文章を書くのが辛くなってきたので箇条書きで許してください。

  • 設計を学ぶとは「設計で何を解決したいかを理解すること」
  • MgrとEMは対極にあるものではない
  • リーダーシップは大事、チームを引っ張るようなエンジニアになりたい
  • 組織の特徴によって求められるリーダーシップは違う

最後に

メンターの方、チームの方、人事の方、色々な方にとてもよくして頂きました。インターンに参加した目的を達成できただけでなく、多くの学びを得ることができました。

1ヶ月間、本当にありがとうございました。

Summer Internship 2018 @ mercari

8/1-8/31の1ヶ月間、メルカリのサマーインターンに参加してきました。

動機

学部4年になり、卒論もあるので今年はインターンは参加しないかなと考えていました。しかし、実際にインターンの応募期間が始まって先輩たちが楽しそうにしているのを見て、気がついたらエントリーをポチッと…

その後、趣味で開発したAndroidアプリをフルスクラッチでリファクタリングしていた時期が重なり、「Android+ソフトウェアアーキテクチャを学びたいな」と考えていました。

mercanの記事にiOSのリファクタリングの話が出ていて、もしかしたらAndroid版も新しいアーキテクチャに沿った開発が行われているのでは!?と希望を抱き応募。

あと、一番大きいのが「自分の持っているAndroid知識を全部ぶつけたらどのくらいの成果が出せるか」気になって仕方がない。周りにAndroidエンジニアがいないので、自分の価値が分からないでいました。

選考

募集職種は13種と多く、その中でも自分は、”Software Engineer(Android)”に応募しました。

理由は、自分の中で「Androidが一番詳しく、アウトプットを出せる」かなと。

選考の流れとしては

レジュメ・履歴書提出→技術テスト→面接

でした。特に変わったこともなく、無事合格できました。

印象

一番印象に残っているのは「アウトプットを出す」を求められたこと。1ヶ月と短い期間でいかにアウトプットを出すかを常に考えていた気がします。

他の参加記でも言われていますが、「インターンだから~」といった制約が一切ないので自信を持ってvalueを出せる環境があると感じました。

余談で、オフィスが非常に過ごしやすいのと無限自販機が最高によかった。

内容

配属されたのは、メルカリJPのAndroidアプリのチームでした。

インターン用にタスクが用意されているのではなく、実際に業務を行っていく形です。「実際の開発業務」を行えるのは本当にいい。

具体的には、採用しているアーキテクチャに沿って設計し、実装に落としていく作業をずっと行っていました。ソフトウェアにおける設計だけでなく、「正しいリリースフローはどういったものか」「PRにはレビュワーに対してコンテキストを残す」などチーム開発で重要な多くの学びを得ました。また、Koltinについて新しい知見を得ることができました。一番印象に残っているのはKotlin Fest に参加したことで、非常に感謝しています。

動機としてあった「自分の持っているAndroid知識を全部ぶつけたらどのくらいの成果が出せるか」については、十分達成できたと考えています。Androidについての知識は十分あると思えるようになった一方で、コンテキストを十分残すといった課題も見つけることができました。ソフトウェア設計においては、設計書の作成やレビューを通して多くのインプットがあり、まさに「自分の価値を知る、高める」インターン内容でした。

感想

自分の好きなプラットフォームで業務ができるのは最高に楽しかった。一日中Android Studioを開いてるって最高じゃないですか!?気がつけば1日・1週間が終わってる感覚に陥っていました。

メンターランチやチームビルディングを通して他のエンジニアの方とお話をすることもでき、今後のキャリアを考えていくために非常に参考になりました。また、アウトプット出す1つの方法として「ブログを書くこと」も再確認できたかなと。

今後は、今回得たインプットを積極的にアウトプットしつつ今しかできない様々なことに挑戦していこうと考えています。

メルカリが入っている六本木森ビル

Kotlin Fest 2018 に参加してきた

個人のブログを書くのはかなり久々ですね。久々に技術的な記事になります!

8月25日にあったKotlin Fest 2018に参加してきました。

なぜ参加したか

昔から趣味でAndroidアプリサーバープラグインをKotlinで開発しているのでKotlinコミュニティに参加してみたいと思っていた。(地方学生はつらい)

Kotlin Fest 2018 には無料の学生枠が10人あったのですが、申し込み開始1時間後にはすでに埋まっていてチケットを取れずにいたところを、インターン先のメルカリさんに相談したところスポンサー枠でチケットを頂きました。ありがとうございます!

ちなみに、メルカリはKotlin Fest 2018の「ことりスポンサー」です。

オープニングセッション

非常に大きい会場だったのですが、私が開始時刻ギリギリに着いた時にはほとんどすべて埋まっていました。(スライドの色飛びがすごい)

  • Kotlinの歴史
    • 2011/07に発表
    • マイルストーン形式で小出しリリース
    • 2016/02にv1.0がリリース
    • coroutineはv1.1から登場
  • 日本Kotlinユーザーグループ
    • JKUG
    • 勉強会やSlackチャンネルを運用
  • 意外とサーバーサイドKotlinの導入事例は多い
  • Kotlinを知る
    • 「Kotlinを愛でる」は「Embracing Kotlin」の訳
    • Kotlinの哲学
      • 実用主義
      • 簡潔
      • 安全
      • 相互運用性
  • Kotlinの公式チュートリアル Kotlin Koans
  • Kotlin Guides
    • スタイルガイドの確認にお世話になるところ
  • KotlinのWebフレームワーク Ktor

感想

Kotlinの歴史は、最近Androidプラットフォームの公式言語になった程度だったのですが、v1.0は2016年だという驚きがありました。

Kotlin KoansやGuidesなど、Kotlin入門向けの内容だと思いました。また、Kotlinコミュニティの雰囲気もなんとなく感じれた気がします!

 

Kotlin で改善する Android アプリの品質


KotlinはJVM言語なのでJavaとよく比較されるが、なんとなくKotlinの方がいいと言ってるけど具体的にこういう点が優れているよねというお話

  • Androidアプリ品質とは
    • 速い
    • 落ちない
    • 使いやすい
  • 品質とは何か
    • 外的品質要因
      • スピード、使いやすさなどユーザーが認識できるもの
    • 内的品質要因
      • モジュール性、読みやすさなど、外的品質要因以外
  • Effective Javaの多くの項目が言語仕様で対応している
  • Kotlinを使用することで「明瞭で、正しく、再利用可能で、強固で柔軟性があり、保守可能なプログラムを書く」エッセンスが自然と取り入れられる

感想

具体的にKotlinがどういった点でJavaより優れているか知ることができたのがよかったです。スライドを見てもらうと分かると思うのですが、Effective Javaの項目を一つ一つ丁寧に解説されていたのも勉強になりました。

Kotlinアプリのリファクタリングポイント

  • Gradle Kotlin DSL
    • Groovyよく分からない。Kotlinで書きたい。
    • 知っている言語で書くことによってメンテナンス性が向上する
  • 重複した処理
    • 拡張関数が便利 <= わかる
      • 公式が使いそうな命名はしない
    • 乱用には注意
  • Collection
    • Listはimutableとは言い切れない
    • 2つのリストを同時に使い場合は .zip
    • 変換 .mapNotNull
    • N個づつに分割 .withIndex, groupBy
    • 否定はほとんど書き換え可能
  • スコープ関数
    • 処理をまとめることができる
    • ローカル変数が優先されるので注意
    • let/elvis は if/else と等価ではない
  • data class
    • ありえない状態を考慮したくない
      • sealed class, Either, Pair

感想

Kotlinのリファクタポイント、様々な気付きがありました。今まで、Listはイミュータブルだと思ってた。。(基本的にはそう)

data class も、簡単なモデルだと非常に便利ですが、巨大なモデルになると注意が必要になってきますね。全体的に、すぐ使える知見が詰まっていたと思います。

Kotlin linter

  • Linterの使い方や特徴
  • Linterの小スタムルールを作る
  • Linterとは怪しいとこにフラグを立てるプログラム
  • ktlint
    • gradle plugin(ktlint-gradle, kotlinter-gradle)
  • detekt
    • 高機能
    • configファイルで個々にルールの有効を変更可
    • visitは複数のメソッドがある
    • カスタムルールでフォーマットできる
  • android-lint
    • xml, java, kotlin をカバー
    • カスタムルールは googlesamples

感想

はじめて lint の世界を覗いた気がします。IDEなどでいつもオレンジ文字を出してくれるやつはこうやって解析して動いているんだなと知ることができました。

Kotlin コルーチンを理解しよう

  • サブルーチン: 親子
  • コルーチン: お互い対等
  • 一時停止可能な計算インスタンス
  • スレッドに似ているが特定のスレッドに束縛されない
  • 継続状況を容易にかける
  • 継続条件が増えても .await() なのでネストが深くならない
  • どうやって実現してるの?
    • Kotlinで動くならJavaで動くはず
    • コルーチンをステートマシーンにする
    • 中断と再開を状態遷移と見立てる
    • suspend修飾子: コンパイル時に自動的に継続オブジェクト引数が増える
    • suspendにはいくつか拡張関数がある
    • コルーチンビルダー: launch, asyncとか
    • 実行スレッドをコントロールできる
    • launch関数
    • 結果を持たない
    • 開始の開始も変えれる
    • 親jobを渡すことで一斉にcancelとかもできる
    • async 値を返す
    • 例外はlaunchの中でcatchする
    • await(), await() で並列化
    • リトライ: repeat(3) { return@repeat }
  • android-coroutines
    • onActivityResult, PermissionRequest とかあるよ

感想

Kotlin coroutines はよく使っているのですが、イメージとして「謎技術でいい感じにしてくれるやつ」としか思っていなかった。KotlinはJVM言語だからJavaでも書けるよね というアプローチはとてもわかり易かった!Kotlin coroutines は「ステートマシーンの考え方で状態遷移させてるんだよ」って言えるようになりました。

ピンポイントな技術的な話で非常に面白かった。

How to Kontribute (v4 JP)

スライド

こちらはコントリビュートの具体的な手順の説明だったので要約を見るよりスライド↑を見たほうが分かりやすいと思います。(なので要約はナイデス)

感想

発表のプロだと思わせるようなプレゼンでした。(どうすればあんなスムーズに進めれるんだ…)個人的には、初心者から始めやすいチケットが紹介されていたのが知見としてありました。JDKのバージョン4つもいるんですね…

まとめ

こういった技術カンファレンスに参加するのは初めてだったのでとても勉強になりました!特に、コルーチンの話は本当によかった。趣味やインターンでKotlin好きと言えるレベルで書いてはいるのですが、まだまだ知らないことも多いのだと感じることができました。

積極的にKotlinコミュニティに関わっていきたいですね!

できたてサーバー 1.12.1 World of Color Update

できたてサーバー(猫)のバージョンをSpigot 1.12.1にアップデートしました。

それに伴い、幾つかの変更点がありますのでお知らせいたします。

新要素

  • Minecraft 1.11~1.12.1で追加された要素
  • ShopChest (出店プラグイン)

廃止

  • ChestShop (バージョン非対応のため)

 

不具合等を発見した際は当サーバーの公式フォーラムをご利用下さい。

また、後方互換のため、1.9.x以上のクライアントからもプレイ可能ですが、一部の新要素が利用できない可能性があります。ご了承ください。

【重要】旧サーバー利用者保証措置について

日頃よりできたてサーバー(猫)をご利用いただきまして

誠にありがとうございます。

前記事で告知させていただきました、

サーバーの大規模なリニュアルに伴い、

旧サーバー利用者の方に向けた保証措置についての

詳しい内容の説明をいたします。

旧メインワールドで所持されていたアイテムに関する保証措置について

旧メインワールドで所持されていたアイテムに関しては

1LC分のアイテムを新ワールドに移動することを許可いたします。

<移動方法>

・旧メインワールドにアイテム移動専用チェスト置き場を設置いたします。

・移動を希望される方は、フォーラムのアイテム移動申込トピックにて

申請をしてください。

申請期限は8月25日です。

それ以降の申請は受け付けることができません。

・申請後随時スタッフが

移動専用チェスト置き場のラージチェストを

1プレーヤーにつき1つ開放いたします。

・使用可能になったチェストに移動したいアイテムを入れてください。

・1プレーヤーに1ラージチェストを開放しますが、

他のプレーヤーとの共有は禁止します。

・イベントチケットは移動不可とします。

・イベントアイテムに関しては5つまで、

イベントアイテムの同一アイテムは複数個移動は出来ません。

・中身の入れ替えはサーバーが稼働している8月31日まで可能です。

※そのほかの方法でのアイテムの移動は全面禁止とさせていただきますのでご注意ください。

<アイテム移動申し込みトピック>

https://minecraft.kentan.jp/forum/viewforum.php?f=24

旧メインワールドで所持していた建築物の保証措置について

旧メインワールドで所持していた建築物は5個まで移設を許可いたします。

<移設方法>

・フォーラムの建築物移設申込トピックにて申請をしていただきます。

(トピックに申請方法の説明がありますので熟読していただき

間違った申請をしないように気を付けてください)

・村開設について新ワールドではルールが変わるため、

村全体の移設には応じられません。
(新体制の村開設に関しては現在調整中の為今しばらくお待ちください)

・建物内にエンダーチェストやチェスト、

ベッドを設置しても、中身は保証対象外です。

・移設対象建築物における、

ダイヤモンドブロック、ラピスラズリブロック、

エメラルドブロック、レッドストーンブロック、

石炭ブロック、乾草の俵、

鉄ブロック、金ブロック

(リストに書き忘れておりました。大変失礼いたしました)

は移設禁止素材とします。

現在使用している場合は、他のブロックに置き換える又は、

削除した状態で申請してください。

・移設チェック時に上記の禁止素材があった場合は

削除した状態で移設させていただきますのでご了承ください。

 

8月28日追記)

 建築物移設においてTTを移設することは不可ということになりました。

 今後新しいワールドでユーザーがTTを作成可能かどうかについても審議中の為

 決定し次第発表いたします。

 

申請期限は8月31日です。

<建築物移設申込トピック>

https://minecraft.kentan.jp/forum/viewforum.php?f=25

大規模なリニュアルにつきご迷惑ご不便をおかけいたしますがご理解のほどよろしくお願いいたします。

【重要】できたてサーバー(猫)大幅リニュアルのお知らせ

日頃よりできたてサーバー(猫)をご利用いただきまして、

誠にありがとうございます。

この度、できたてサーバー(猫)(以下当サーバー)は

大規模リニュアルすることになりましたのでお知らせいたします。

かねてよりサーバーの全体的な体制の脆弱性が課題ではあったのですが、

運営スタッフの度重なる協議の結果、

サーバールールの改定やフォーラムの設置など

小さい対策では改善しきれないという結論に至り、

今回の大規模リニュアルを敢行することとなりました。

今まで当サーバーをご利用いただいていたプレーヤーの皆様には

ご不便をおかけいたしますが、
より住みやすく、より楽しめるサーバーにしようという

運営スタッフ全員の意向にご賛同いただけると幸いです。

リニュアルオープンは2017年9月15日金曜日 午後6時スタート

を予定しています。

リニュアルに伴い、2017年9月1日金曜日 午前0時よりサーバーを休止し、

準備期間に入ります。

その間サーバーはご利用いただけませんのでご注意ください。

リニュアルの内容は

1:サーバールールの改定とサーバーホームページのリニュアル

今までwikiやホームページなどに分散していた

当サーバーの情報を一括で閲覧できるように、
ホームページを大幅リニュアルいたします。

今後はホームページを見れば

いろいろな事が分かる仕様にしてまいります。

また以下に挙げるリニュアル内容に伴い

サーバールールも追加、改定がありますので

リニュアルオープン時には必ずサーバールール等規約を熟読し

ご理解いただき、ご承諾いただいた上での

ご利用をお願いいたします。

2:メインワールドのリセット

拠点を置いて生活をしていただくメインワールドを

新規のワールドで始めていただきます。

保護区域や初期スポーン、公営施設をしっかりと整備し、

より使いやすいメインワールドとなるようリセットを敢行いたします。

旧メインワールドをご利用いただいていたプレーヤーの皆様には

保証措置が取られますので、

別記事にて詳細をご説明いたします。

保障措置の内容をしっかり理解して、

手続きをしていただければと思います。

3:ショップワールドの新設

今まではメインワールドに

マーケットプレイスをご用意いたしまして、

住民の皆様にショップを開業していただいておりましたが、

ALL値の上昇などによるラグなど弊害も多かったため、

ショップワールドを新たに新設し正式な手続きをしていただいた

住民の方にショップを開いていただく形になります。

詳細はリニュアルオープン時ホームページにて公開いたしますので、

ご覧ください。

4:プレーヤーデータのリセット

メインワールドのリセットやサーバールールの大幅改定に伴い、

プレーヤーデータもリセットさせていただく事になりました。

残念ながら最近サーバールールを

ご理解いただき切れていないプレーヤーの方を多く見受けられ、

今一度初心に立ち返り、サーバールールをしっかりご理解いただき、

楽しく当サーバーでの生活を楽しんでいただきたいという気持ちで

敢行させていただく事となりました。

ご理解のほど宜しくお願いいたします。

5:運営スタッフの役職変更

リニュアルに伴い、一部スタッフの役職が変わります。

新しい体制は

Server Admin:Ken_Kentan・・・システム的なサーバー管理をします。

Admin:tiruno283・・・実質サーバーの表立った代表業務をします。

Moderator:xoliviaxsunx・・・環境保全、住民の相談窓口等の業務をします。

以上の三人の役職が変更になります。

同時に旧サーバー住民の皆様への補償措置についての 記事をアップしますのでそ

ちらもしっかりとご覧になってください。

2016年度、できたてサーバー(猫)クリスマスイベント  開催中!!!

いつも「できたてさーばー(猫)」をご利用いただき誠にありがとうございます。
大変長らくおまたせいたしました!
2016年12月17日から2017年01月15日までの期間中できたてサーバーにて
クリスマスイベントを開催いたします!

開始日が遅れたということもあり、1月の中旬まで開催の予定となっておりますので
ご了承下さいませ。

今回のクリスマスイベントは去年と同じようにアスレチックをくぐり抜け、最終的にボスを
倒し、クリスマス限定アイテムを獲得するという形になります。

さらに今回クリスマス専用の3つのプレゼントボックス型ガチャを設置いたしました!
内容はこちら↓

・ブルーボックス:イベントチケット1枚で引けます
・レッドボックス:イベントチケット10枚で引けます
・ブラックボックス:イベントチケット64枚で引けます。※超低確率

なにが出るかは引いてからのお楽しみです。

イベント会場はイベントワールドよりずっとまっすぐ突き進んだところにございますので
ご興味のある方は是非ご参加下さい。

2016年度、秋のハロウィンイベント  開催中!!!

2016-10-24_19-12a
いつも「できたてさーばー(猫)」をご利用いただき誠にありがとうございます。
2016年10月27日から2016年11月15日までの期間中にハロウィンイベント
開催いたします。

今回のイベントの内容ですが、ハロウィンということで、お化け屋敷なステージを
こちらでご用意させていただきました。

お化け屋敷内でとある封印を何個か解くとボスへの参加資格が得られ、
ボスを倒し終えるとランダムに一つハロウィン限定のアイテムをゲットできます!
中には以前にもあったクリスマスイベントの「防寒着」のように耐久値が減らない
装備もございます。

場所はイベントワールドに入ってすぐ右のショートカットからすぐにでもご参加出来ます
ので、ご興味のある方は是非参加してみて下さい。

Dynmapにおけるセキュリティホールについて

Minecraftサーバーでは有名なDynmapですが、アクセス権に関するセキュリティホールがあり、当サーバーでも該当していたので報告します。

DynmapでMySQLを使用している場合、「web/standalone/MySQL_config.php」にSQLサーバーにアクセスするために必要なデータが記述されます。

これには、MySQLサーバーの「ホスト、ポート、ユーザーID、パスワードなど」が含まれており、すべて平文で読み取ることが可能です。

dynmap_mysql_config

 

公式ドキュメントには、導入に関してこのようなファイルが生成されるという記述がなく、挙句の果てには、「standalone」フォルダにフルアクセス権限を与えるトラブルシューティングが載っています。。。

 

このセキュリティホールは、非常に危険で、該当ポートが開いている場合、悪意のあるユーザーがMySQLサーバーにアクセスし、DBを弄ることが可能になってしまいます。また、ポートが閉まっている場合でも、パスワードを使いまわしている場合は、他のサービスが攻撃される可能性があります。

DynmapでMySQLを使用している管理者様は必ず確認してください。私がminecraft.jpにあるサーバーリストで確認したところ、いくつものサーバーがMySQL_config.phpを読み取ることが可能な状態でした。

修正方法

重大なセキュリティホールですが、これはアクセス権を適切に設定することで簡単に修正することが可能です。

Linux系の場合は「standalone」フォルダのアクセス権を644に。

Windows系の場合は「standalone」フォルダのアクセス権を全て拒否(項目が多く、必要な権限について詳しくは特定していません。)することでアクセスすることができなくなります。

また、MySQL_config.phpを読み取ることが可能な状態に合致していた場合は、関連するパスワードの変更を強く推奨します。

 

間違い、質問等があればコメントか@ken_kentanにまでお願いします。また、この件は既に開発者に報告済みです。

Super Cube World アップデート v1.3.20

scw_update_v1320

Super Cube World v1.3.20 をリリースしました。

  • Google Play Games Services | Cloud Save に対応
  • Android Nに対応
  • ステージ読み込みスピードを改善

 

Google Play Games Services | Cloud Save に対応

Google Play Games Servicesにログインしている場合、クラウドを介したセーブデータの同期が可能になりました。

起動時にクラウド上のセーブデータと端末のセーブデータを比較し、クリアしているステージレベルが高い方を優先し、上書きします。

 

ステージ読み込みスピードを改善

ステージ読み込みの際、60fpsを保証できるまで待っていたのを50fpsに引き下げました。

© 2019 ken kentan blog

Theme by Anders NorénUp ↑