岡竜之介のブログ

岡竜之介のブログです。

「あなたに合った勉強法」なんてない!「あなたに足りない勉強法」ならある。セオラゴ勉強法診断のすすめ

こんにちは!予備校講師の岡竜之介です。主に物理(ときどき数学と情報)を担当しています。

先日、私が運営しているWebサイト「セオラゴ」に「タイプ別勉強法診断」を作りました。

セオラゴ - タイプ別勉強法診断

質問に答えてもらって診断を出すという、昔からある性格診断みたいな形式です。

私がこれまで「どんな人にどんなアドバイスをしてきたか」を考えて、それを診断の形式でまとめたものです。

これが思った以上に評判が良いので、もっと皆様に使っていただきたいと思いこの記事を書いています。

評判

実は既に公開から4ヶ月ほど経過しておりまして、診断を使っていただいた方にアンケートを任意でアンケートを取っています。

集計時点で877件のアンケートを頂けております。お答えいただいた方ありがとうございました。

このアンケート結果が大変好評でして、診断を作った私自身、大変驚いています…!

統計

どのくらい当たっていると感じたか

'当たっていた'
'やや当たっていた'
'どちらでもない'
'あまり当たっていなかった'
'まったく当たっていなかった'

の5段階評価で聞いた所

「当たっていた」と「やや当たっていた」の2つを合わせて 95.78% もの高評価を頂いています。

また、診断結果やアドバイスが役に立ちそうか

'役に立ちそう'
'少し役に立ちそう'
'どちらでもない'
'あまり役に立たなさそう'
'まったく役に立たなさそう'

の5段階評価で聞いた所

「役に立ちそう」と「少し役に立ちそう」の2つを合わせて 94.07% もの高評価を頂いています。

いずれも想定していたよりかなり高い!めちゃくちゃ高い!

コメント抜粋

自由記述欄に書いていただいたコメントを一部要約して紹介しますと

>当たりすぎて怖かった
>すごく参考になった
>モチベ上がった
>勉強法がわからず悩んでたからありがたい

と言った内容が大半でした。この診断をやってみたことで「何をすれば良いのか」の道筋が見え、モチベーション向上に繋がったと考えられます。

人間、やろうと思っていても、「具体的に何をするのか」が細かく見えていないとモチベーションが上がりにくいものです。

この診断の結果ページでは、具体的に何をするべきで、何をするべきでないのかを書いているので、モチベーションが上がるのかもしれません。(作ったときにそこまで想定していたわけではないのですが…笑)

対象

ではここから。「セオラゴ タイプ別勉強法診断」について紹介していきますね!

この診断では特に「理系科目の勉強方法」について診断しています。「趣味で数学を理解したい」みたいなことではなく、受験やテストで点を取るための勉強を想定しています。

なのでメインターゲットは中学生・高校生です。ですが、小学生・大学生・社会人の方にも利用していただけているようで、その場合にもアンケートでは好評を頂いています。ありがたい。

大きな特徴

世の中には「勉強法診断」「勉強タイプ診断」などと名乗るものがたくさんありますが、

「セオラゴ タイプ別勉強法診断」が他と大きく異なるのは

診断結果のタイプに序列があるところだと思います。

多くの勉強法診断では「あなたは耳で覚えるタイプ / 映像で覚えるタイプ」とか「あなたは一人で勉強するタイプ / 友達と勉強するタイプ」などの診断結果が出ますが

そもそも「人によって最適な勉強方法が違うから、自分に合った勉強方法を探すべき」という考え方は既に否定されています

Learning Styles: Concepts and Evidence
Finding No Evidence for Learning Styles | Journal of Chemical Education
「学習スタイル」という考え方は迷信に過ぎない - GIGAZINE
「自分に合う学習スタイル」は存在するのか? 疑似科学としての「ラーニング・スタイル」 | あすこまっ!

文字や音声だけで覚えるよりも脳内アニメーション映像やメンタルモデルを作る方が、きちんと理解して覚えられるに決まってます。そりゃそう。

一人で勉強するタイプ / 友達と勉強するタイプ に関してですが、基本的に勉強は一人でするものなんですよ。ただ、一人だとサボってしまうという場合に、サボりを防止する手段として「友達とメッセージをやり取りしながら」とか「友達と同じ空間で」勉強するという選択肢があるわけです。なのでそもそも「友達と勉強するべきタイプ」というのはないです。

ではこの診断では何を診断するのかと言うと

今のあなたに何が足りないのかを調べます!

なので、足りないものが少ない診断結果ほど「良い」結果ということになり、診断結果に序列があるわけです。

評価軸の紹介

この診断では、理想的な勉強ができている状態を、次の3つの軸で判定します。

理解の深さ Model vs Pattern 軸

きちんと理論や現象を「何故そうなるのか」を脳内モデルを伴って理解できているか、それとも単に「こういう問題ではこういう計算をする」「◯◯の公式は✗✗」のようにパターンで丸暗記しているかを判定します。

きちんと理解している人をM(Model)型、丸暗記の人をP(Pattern)型と呼びます。もちろん、M型の方が望ましいです。

高校物理の例で言うと、丸暗記型(P型)の人は、ばねに押された物体の移動距離を v_0 t + \frac{1}{2}a t^2で計算してしまったりします。

でも、この式は「加速度が一定である」という条件下でしか使えませんので、ばねに押された物体では不適です。

M型の人は脳内モデルによって、ばねに押された物体の運動が往復運動の一部になるイメージが湧き、さっきの式は使えないとすぐに察知できます。

P型だと単に日本語や式を丸暗記する勉強をしている結果、「この場合はダメ」というケースを見抜けないことが多いです。

振り返り・自己調整 Reflective vs Non-reflective 軸

問題の解き方や、普段の自分の勉強への取り組み方について見直しをしているかどうかを判定します。

問題を解くときにも、普段の勉強でも、ただ闇雲に猪突猛進していると、効率のよくないやり方で時間ばかり浪費することになりかねません。

時々立ち止まって振り返り、「目標はなんだったか」「今のやり方で効率よく目標に近づけているか」を考えるのが良いです。


計画実行・行動量 Disciplined vs Loose 軸

行動が伴っているかどうかを判定します。

内容を理解できているからと言って演習をあまりしなかったり、計画ばかり立てて実行が伴っていない場合、力は伸びていきません。そりゃそうだ。

勉強を開始してもすぐに他事に興味がそれてしまったり、そもそも勉強を開始すること自体が難しい場合は、自らを勉強に向かわせるための工夫が必要になります。

各タイプの紹介

以上の3軸で判定すると、2×2×2で8タイプが存在することになります。

詳細はリンク先のセオラゴ診断ページで解説していますので、ここでは簡単な紹介に留めます。

MRD バランス良好型

セオラゴ - 数学・物理コンテンツ

全ての判定軸で良い判定が出ている、理想的なタイプです。引き続き気を抜かずにやっていましょう。

MRL 理論好き非実行型

セオラゴ - タイプ別勉強法診断 - MRL 理論好き非実行型

何かを理解するのは好きだけど、手を動かすのは面倒くさいというタイプです。

受験勉強の前半戦、知識を増やすパートは好きですが、後半戦の演習訓練パートは大嫌いという人がこれ。理系に多い。

MND ケアレスミス量産型

セオラゴ - タイプ別勉強法診断 - MND ケアレスミス量産型

内容も理解している。手も動かしている。しかし「あと一歩良くするための改善余地はどこにあるか」のメタ認知を放棄しているのがこのタイプ。

一度きちんと「最適化作業」を行って、パフォーマンスをチューニングしましょう。解法選択の考え方や、計算用紙のレイアウトなど、見直せるところは案外あるはず。

MNL 一発理解のみ型

セオラゴ - タイプ別勉強法診断 - MNL 一発理解のみ型

学校の授業と教科書でだいたい分かると高を括って、それ以上何もしないタイプです。作者の岡竜之介はこのタイプ。宿題とかめっちゃ嫌いで、踏み倒していました。

学校のテストや模試ではそれなりの成績を取りますが、最終的に演習量が足りずに、しっかり手を動かして訓練してきた人に負けるのがこのタイプ。

PRD 論理力不足型

セオラゴ - タイプ別勉強法診断 - PRD 論理力不足型

誰よりも真面目にやっていて、勉強に費やしている時間も長いのに、模試の成績があまり上がらないのがこのタイプ。真面目なので学校のテストはそれなりに取れて、先生からは高く評価されがち。

その勉強内容は解き方をひたすら覚える「パターン暗記」になっていて、問い方を少しひねられると何をしていいかわからなくなる。

PRL 情報収集特化型

セオラゴ - タイプ別勉強法診断 - PRL 情報収集特化型

「自分のやり方は本当にこれでいいのか?」「もっといいやり方があるはずだ」と振り返りばかりしていて実行が伴わないのがこのタイプ。

前の参考書も済んでないうちに次の参考書を買ったり、塾をちょこちょこ変えたりするけど、腰を据えて勉強していないので結局伸びない。

PND 猪突猛進型

セオラゴ - タイプ別勉強法診断 - PND 猪突猛進型

実行力だけはとにかくある!のがこのタイプ。重い計算もいとわずゴリゴリにこなすが、もっと良いやり方の存在に気づかない。

一度立ち止まって、効率を上げることを考えてみよう。

PNL モチベーション不足型

セオラゴ - タイプ別勉強法診断 - PNL モチベーション不足型

3全ての軸が良くない方に判定されてしまうとこのタイプ。でも実は診断を受けてくれている方々のうち半分近くがこのタイプです。

実はこの3軸の診断はそもそも、1つでも良い方にするのが案外難しいです。目標とモチベーションがなければ、理解しようとも(MP軸)、効率を上げようとも(RN軸)、時間を確保して実行しようとも(DL軸)しないですからね。

「何のために勉強するのか?」「勉強してどうなりたいのか?」を見つけることが実は一番難しかったりします。

最後に

改めて。「セオラゴ タイプ別勉強法診断」はこちらです!やってみてね!

セオラゴ - タイプ別勉強法診断

また、ここまで読んでいただいた皆様に、もっとも重要なことをお伝えします。

この診断でモチベーションが上がったら、上がってるうちに勉強を実行しましょうね!

でないと何の意味もないですよ!!

記憶は外注できるのか?〜タスク管理から始まる「第二の脳」構想〜

(※投稿者注)この記事は投稿者がChartGPTと会話した内容をそのままそのチャット欄でChatGPTにまとめさせたものです。使用モデル:gpt-4o

1. 記憶の外注とは何か?

私たちは日々、多くのことを「覚えておかなければならない」と感じながら生活している。
その負担は時に膨大で、特に現代のように情報量が爆発的に増えている時代には、脳のリソースは簡単に圧迫される。
そこで注目されるのが、「記憶を外注する」という発想だ。

たとえば、スケジュール管理アプリやタスク管理ツールに予定を記録することは、最も基本的な記憶の外注だと言える。
記録しておくことで、脳内でその予定を常に意識しておく必要がなくなる。
これは、いわば「思い出さなくてもいい」という選択肢を自分に与えることであり、そのぶんの思考リソースを他に回すことができるようになる。

だが、この発想をさらに拡張していくと、「タスク」や「予定」だけでなく、「知識」「人間関係」「過去の体験」といった、より複雑で広範な記憶も、部分的に外部に預けられるのではないかという可能性が見えてくる。


2. タスク管理の進化:脳から「忘れてもいい」という許可

タスク管理の目的は、「やることを忘れないようにする」ことではなく、「気にし続けなくても済むようにする」ことにある。
脳が本来得意ではない、「未来に起こることを記憶しておく」という作業を、AIやツールに任せてしまえば、そのぶん脳は現在の作業に集中できる。

しかし、問題もある。
たとえば、誰かに「◯◯の件、進捗どうなってる?」と聞かれたときに、タスクの存在自体を完全に忘れてしまっていたら困る。

このとき有効なのが、「存在は覚えておくが、内容は外部に預ける」というスタイルだ。

  • タスクの存在(タイトル)→ 自分のRAM(短期記憶)に残す
  • 詳細な内容や期限、必要なファイル → 外部記憶に外注

これにより、「常に気に病まなくていいが、必要なときにはすぐ思い出せる」という状態が実現する。
いわば「記憶のキャッシュ機構」を人工的に構築するようなものである。


3. 記憶の分類と外注戦略

すべての記憶が同じように外注できるわけではない。
どの記憶をどこまで外部に預けるかを考えるために、心理学や認知科学の分類を参考にしながら、記憶のタイプごとに最適な「外注レベル」を考えてみよう。

記憶のタイプ 脳に残すべき要素 外部記憶に預ける要素
手続き記憶(操作・動作) 動作感覚・コツ 手順・例外処理・図解
意味記憶(概念・定義) 使用頻度の高いもの 詳細・類似概念・背景知識
エピソード記憶(体験) ハイライト・ストーリー 時系列・細かい会話・データ
感情の記憶 今に影響する感情 一時的な感情記録
人間関係の記憶 名前・関係性・最近の話題 誕生日・趣味・過去の発言ログ
意思決定の履歴 方針・価値観のコア 検討過程・選ばなかった選択肢
創造的構想 現在の核のアイデア 下書き・派生案・関連資料
タスク記憶 近々のタイトル 内容・進捗・期限など

このように、「RAMに何を残し、何を外注するか」を記憶の種類に応じて柔軟に変えることで、思考の滑らかさと安心感の両立が可能になる。


4. 外注の効果:本当に「忘れられる」のか?

ただし、ここで一つ大きな問題がある。

外部に預けた記憶を、自分の脳から「完全に消す」ことはできない。

これは人間の記憶構造の根本的な性質に起因する。
脳内の記憶はネットワーク状に連結しているため、ある記憶を消そうとしても、それと結びついた別の記憶から再度呼び出されてしまう。

さらに、「忘れよう」と意識することで、むしろその記憶が強化されてしまう「ホワイトベア効果(皮肉過程理論)」という現象もある。
つまり、意図的に忘れることはほぼ不可能であり、現在できる最善は「思い出さないで済む環境を整え、自然に記憶が薄れるのを待つ」という受動的な消去戦略に頼ることになる。


5. 未来への展望:リアルタイム連携による「拡張記憶」

こうした限界を踏まえた上で、それでも将来的には「記憶の外注」はより高度に実現できる可能性がある。

たとえば以下のような技術の進化が期待される:

  • ウェアラブルAI耳:常に自然に話しかけられる相棒のような存在
  • 視線・脳波・音声ログ解析:今の文脈に応じて必要な情報を自動で提供
  • 記憶想起履歴の可視化:どの情報を自分が最近使ってないかを提示
  • 選択的忘却支援:記録済みの情報を自分の脳から「安心して手放す」仕組み

これにより、「現在使っていない知識・記憶を一時的に非活性化し、必要なときにのみ復元する」という、まさに第二の脳としての外部記憶が現実味を帯びてくる。


6. 結論:記憶の設計もまた、自分の仕事である

私たちは、「何を覚え、何を忘れるか」を自然に選んで生きてきた。
だが今後は、それを自覚的に設計し、外部と連携しながら構築していく時代になる。

記憶を完全に外注することは、まだ難しい。
しかし、「これは自分が覚えておくべきことか?それとも信頼できる外部に預けるか?」という問いを持つだけでも、記憶の運用はずっと楽になる。

そして、それを支える外部記憶やAIとの関係性は、これからの「拡張知性」の中心的テーマになっていくはずだ。

マッチングアプリのノウハウ記録

私がたどり着いたマッチングアプリのノウハウを書き出して記録しておこうと思います。

ちなみに男性向けです。女性でも通用するかどうかはわかりません。

また、あくまで私の体験に基づくものなので、本人のキャラクターや所属文化圏によっては全然違うかもしれません。

プロフィール写真

まず何より重要なのはプロフィール写真です!

恐らく半分以上の人は、LIKEするかしないか判断する時にここしか見ません!(半分以上という数値に根拠はないです)

この記事は写真についての所だけ見て、あとは全スルーしても、全部読んだ場合と比べて80%程度の効果はあると思います!

写真を撮ってもらう

この記事にたどり着いた男性陣は恐らくプロフィール写真を設定するときに

「そもそも写真がない」という困り方をしてると思います。

男ってあんまり自分たちの写真撮らないので!

これはもう、撮りに行くしかないです。

写真屋さんに申し込むのではなく、友達と観光地に遊びに行きましょう

で、自分の写真を撮ってもらいましょう。

1回遊びに行って200枚くらい撮ってもらえば、詐欺みたいな写真が1つくらいは生成されていると思います。

面倒でも、全てのフォトスポットでいちいち友達に自分のスマホを渡して撮ってもらいましょう。

目的が一致してる友達と行って互いに撮りあえるとラクでしょうね。

なお、自撮りはあんまりよくないと思います。映りも良くならないし、自撮りってわかるので友達いないように見える。

写真を選ぶ

たくさん撮ってもらった写真の中から、採用する写真を選ぶわけですが、

可能なら異性の友達に選んでもらいましょう

自分でいいと思うものと、他人(特に異性)から見ていいと思うものは異なる可能性があるので。

200枚全部見せるのは効率が良くないので、いくつかに絞るところまでは自分でやってもいいと思いますけどもね。

異性の友達がいなければ同性の友達に頼みましょう。

プロフィール

プロフィールは詳しく描きましょう!人柄がわからなければ興味も湧きませんから!

自己PR

当たり前ですがプロフィール欄には自己PRを書きます。

この時のコツとして、相手に話題にさせやすいことを書くといいと思います。

相手もこちらのことを何も知らないわけですから、当然話題に困ってます。

「ところで、◯◯さんって△△なんですね!」と相手が言いやすい内容を載せておくといいと思います。

どう言及して欲しいかまで考えて項目列挙しておくといいでしょう。

「◯◯さんって△△なんですね!すごいですね!」
「◯◯さんって△△なんですね!びっくりしました!」
「◯◯さんって△△なんですね!そういう人と初めてお話ししました!」
「◯◯さんって△△なんですね!私もなんですよ!」
「◯◯さんって△△なんですね!めちゃくちゃわかります!」

などですね。

「そもそも書くことがない」という場合は…まあ頑張って思い出すか、作るしかないでしょうね。

特徴がないままで選ばれるのは不可能なので、これは作るしかないです。

まあ、写真さえちゃんとすれば別にいらないかもしれませんけどね!

プロフィール上部

写真の次に見られるのが「プロフィールの上部」です。

アプリによっては、写真が出る時に重ねて表示されてる部分ですね。

「詳細」ボタンなどを押さなくてもはじめから見えている所です。

先ほどの自己PRの中で、一番インパクトのあるものを置いておくといいでしょう。

私の場合は「東大卒」と「M1グランプリ2回戦進出」と「痩せ型」を書いてました。

反応がよかったのは「M1グランプリ2回戦進出」です。

これは「M1グランプリ出場」でもいいと思います。

M1グランプリって実は誰でも出られるのですが、実際に出た人は珍しいのでかなり引きがあります。

M1グランプリってあのM1ですか???あれに出たんですか?すごいですね!」とよく言われました。

自己PRが何もない人は出てみるといいと思います!

「東大卒」はあまり言及されませんでしたが、これを見てLIKEした人はそこそこいるんじゃないかなと思ってます。知らんけど。

「痩せ型」だけ見てLIKEしてくれた、と言っていた人もいましたね。

体系がたまたま「痩せ型」や「高身長」の人は、それ武器なので必ず書きましょう。

目的を明かしておく

もう一つ。プロフィールには「会って何するつもりなのか」を書いておくべきでしょう。

カフェでお茶したいのか、ランチで和食を食べたいのか、お酒を飲みに行きたいのか、カラオケに行きたいのか、ドライブに行きたいのか。

もっと具体的でもいいですね。

カフェにケーキを食べに行きたい
カフェにコーヒーを飲みに行きたい
日本酒を飲みに行きたい
ウイスキーを飲みに行きたい
カラオケでGreeenを歌いたい
ドライブで◯◯展望台に行きたい

など。

初回からカラオケやドライブは避けられる恐れがあるので

「まずはカフェでお会いして、仲良くなったらカラオケに行きたいです。BUMP OF CHICKENが好きでよく歌います」みたいな感じでもいいと思います。

私は「カフェで作業や勉強をする仲間が欲しい」と書いていました。これは嘘でもなんでもなくマジのガチです。

会ったあと何をするのかイメージが湧かない状態では、「会ってみようかな」とはならないでしょう。

会ったらどんな感じの時間になるのかが具体的に想像できる方が、安心して「会ってみよう」と思えると思います。

趣味

あとは私の場合は、趣味を列挙して少しでも共通点がある人に興味を持ってもらうようにしていました。

趣味から、かなり人柄が知れますからね。

また、共通趣味が一つでもあれば、それを話題に盛り上がれる可能性があります。なのでできるだけたくさん書いておくべきですね。

「趣味ないんだよな…」と思う人もいるかもしれませんが

ちゃんと思い出したらそんなことないはずです!

「たまにやってるけど趣味とまでは言えないな…」なんてことはないのでそれを書きましょう。その「たまにやってる」ことを趣味って言うんですよ。

直近5年で2回以上触れたものは趣味です!書きましょう!

メッセージ

メッセージ1通目

1通目のメッセージはかなり大事です。

女性側には毎日アホみたいな数のメッセージが届きます。(いや、本当の所は知らんけど、そう考えましょう。)

当然、大半のメッセージは見た瞬間にスルーされます。

マッチしてメッセージを送る権利を獲得したとしても、メッセージに返信が来る確率は30%くらいです。

パッと見で「ん?」と思わせる、差別化が必要です。

私はちょっとふざけて

「マッチありがとうございます。それでは探り合いを開始しましょう。」

みたいなメッセージを送ってました(本当に送っていたものとは少し変えてます)

相手は「しましょう。」「探りましょう笑」などと返してくれていました。

返事が「しましょう。」で済むのもポイントですね。質問されていないから答えを考える必要がないし、新たに話題を提示する必要もない。

一回返事がもらえれば、もう一度返事が貰える確率はかなり上がります。70%くらいに。

良くない例

「LIKEありがとうございます!どんな所が気になってLIKEしてくれたんですか?」
これ、言いたくなりますが、良くないと思います。ほぼ「俺を褒めろ」と同義ですし。

相手からすると「いや、なんとなく…」というのが、恐らく正直な所です。

動機を言語化するのは案外面倒なので、その手間をかけさせてしまうと、途中で返信を放棄される可能性が高まります。

会う打診までのやりとり

バランスよく相手のことを聞いたり自分の話をしながらメッセージのやりとりをしましょう。

この時、メッセージはできるだけ即座に返しましょう。

もし相手も即座に返す人だった場合はチャットのようになりますが、その場合は10往復くらいしたら一回休んでもいいと思います。

基本的に返信が遅い人は切られます。なんなら、「返信が遅い人は嫌」とプロフィールに書いてる人も多いくらいです。

5往復くらいしたらLINEなどに移動することを提案してもいいし、しなくてもいいと思います。

そして、会う打診をすることを考えるわけですが、

10往復くらいしたら、会う打診をするといいと思います。

メッセージ開始してから2日以内くらいに会う打診まで行きたい所です。

メッセージを開始してすぐ打診すると引かれますが、遅すぎると相手が冷めてしまいます。相手がメッセージを返してるときは「誰かと会おう」というモチベーションが高いわけなので、その熱量があるうちに打診すべきですね。

打診して好感触だったら、時間と場所まで決めてしまいましょう。これもすぐ決めるべきです。決めずに放置すると相手が冷めてしまいます。

ちなみに、できるだけ近い日に設定すべきです。

当日まで

アポを取ってから当日までのやりとりですが、ここは正直かなり難しいです。

まったくやり取りしないとフェードアウトする可能性が高まりますが、かと言ってまだあんまり知らない相手と話題を保たせるのは大変です。

ここのノウハウに関しては、私もあまりわかってないです。2〜3日に一回くらいメッセージを送ってもたせるようにしていましたが、あまりアポが遠い場合は返信も来なくなってフェードアウトというのもありました。

なので、やはりアポはできるだけ近い日に設定すべきです。

当日

服装・髪型・メンズメイクなど

これは私が言えることは何もないので割愛します。わからなすぎる。他で調べて!!

喋りについて

当日のおしゃべりについて私が意識していたのは「褒める」「相手に興味を持つ」です。

褒める

「褒める」は慣れてないと、口に出すのに勇気がいるものですが、だからこそ褒められると効きます。

調べると「◯◯を褒めろ!」とかいろいろテクニックが出てきますが、とりあえず「◯◯さん、かわいいですね。」って言うだけでもいいと思います。頑張って勇気出して言ってください。言う回数は多ければ多いほど良いです。

相手に興味を持つ

「相手に興味を持つ」も大事です。

普段他人に興味を持たない我々のような人には難しいですが…。

相手は自分と異なる人間なので、自分と異なる点が必ずたくさんあります。

そこをいろいろ聞いてみて、「そうなんだ。」「そんなことあるの??」と心から思ってリアクションできるといいですね。

興味って、「ある」とか「ない」とかじゃなくて、持とうとして持つものなんですよ。(無理なこともあるけど)

ただ質問攻めにはならないように、自己開示も織り交ぜながらバランスよく話しましょう。

小手先のテクニック

あとは、「傾聴」「オウム返し」みたいなテクニックを使ってみるといいですね。調べると出てきます。

特に「オウム返し」は死ぬほど簡単に相手に話を続けさせることができるのでラクです。多用するとバレますが。

ドタキャンについて

ドタキャンやバックレをされるのは日常茶飯事です。

アポを取り付けても、実際に来てくれる確率は50%だと思いましょう。

どっちに転んでもいいように、「来なかったら電気屋に買い物行く」など、セカンドプランを持っておくといいでしょう。

来てくれたらラッキー。「来てくれてありがとう」くらい本人に言っちゃっていいと思います。

10分くらい待って連絡がつかなければ、来ないと判断していいでしょう。

当然、それをされて怒ることもないです。

ただ、ドタキャンやバックレは、自分はしないようにしましょうね。

私は一回もしたことないです。

二回目以降

二回目以降に会うときは、初回じゃない故の難しさというのがあります。

1回目は相手のことを何も知らないので、何でも聞いちゃえばいいんですけど、

2回目以降は、表面的な質問は聞き終わっているので、話の内容選びが一気に難しくなります。

対策はなかなか難しいですが…

1回目に聞いた相手の趣味を、2回目までに自分もやってみて、それについて話す場にするとかかな。

なかなか大変そうですが、逃したくない相手だったらそこまでするべきでしょうね。

数字感について

数字感についてです。

仮に1人と付き合うことを目的とした場合、

300人とマッチして

100人とやりとりして

10人と会って

1人と付き合う

くらいの感覚だと思います。

この間1〜3年くらいかな。

そのくらいの長期スパンで気長にやるのがいいと思います。

一人とうまくいった・いかないであんまり一喜一憂するともたないです。

正直ヤリモクですという場合

別にそれでも、この記事の内容がそのまま通用すると思います。

あとはもう、勇気を出して誘えるかどうかです。

「よかったらこのあとホテル行きませんか?」

かなりストレートですがこれでいいです。

8割がたダメに決まってるんだから、あんまり期待せずとっとと言いましょう。

OKしてもらえたら、よかったね!

「完全数」って何が面白いの???→完全数みたいな概念を量産する

完全数とは

完全数とは「約数のうち自身を除いたものの和が自身に等しい」ような数のことです。

例えば6は、約数が1,2,3,6なので、このうち6以外を足すと1+2+3=6で、6自身に等しくなります。

だから6は完全数です。

完全数はなかなかに珍しく、1から100万までの中に

6, 28, 496, 8128

の4つしかありませんし、現在までに51個しか見つかっていません。


「偶数の完全数は無数に存在するか?」「奇数の完全数は存在するか?」という問題は未解決で、しばしば話題に上がります。


……それはいいんですが……。。。。。。

完全数」って何が面白いの???


完全数」って何が面白いの???

「自身以外の約数の和が自身に等しい」という性質ってなんか、すごく人工感があるというか…それに注目する意味がわからないというか…


「自身を除く約数の和」の「自身を除く」っていうのも、ご都合主義感あるし…


「珍しい」は注目する理由として一理あるけど、「珍しい性質」なんて無限に作れそうというか…


…のようなツイートをした所…。


偶数の完全数メルセンヌ素数と一対一対応するそうです。

奇数の完全数は未発見なので、これが「ない」ということになれば、完全数メルセンヌ素数は一対一対応します。

メルセンヌ素数は便利な素数判定法があって、コンピューターサイエンス上も重要な応用があったりして有意義ですよね。

となればそれと一対一に対応する(と思われる)完全数も有意義と言えそうです。


…タイトルの疑問、解決してんじゃねぇか!!


…ということですいません。煽りタイトル付けました。


本題はここからです。




「自身以外の約数の和が自身に等しい」みたいな『珍しい性質』を無限に作れるかどうか考えるのは楽しそう😀!


こういう「珍しい性質」を大量に作れるのであれば、完全数」なんてone of themであり、大して重要な性質ではない!(メルセンヌ素数と一対一に対応する?ちょっと忘れましたね……)

完全数の定義を言い換えて一般化する


「約数のうち自身を除いたものの和が自身に等しい」


「約数の和が、自分自身の2倍に等しい」と言い換えられます。


となると、


「約数の和が、自分自身のn倍に等しい」と一般化できそうですね????


実は既にそういうものは考えられておりまして


「倍積完全数」というようです。


ja.wikipedia.org



通常の「完全数」は「2倍完全数」のことですね。


それらの性質をWikpediaから引用すると…

k倍完全数が無数に存在するかどうかは分かっていないが、3倍完全数は6個、4倍完全数は36個、5倍完全数は65個、6倍完全数は245個がそれぞれ発見されており、これより多くは存在しないと言われている。


例えば3倍完全数は100万までの範囲には3つあり、現在までに全部で120, 672, 523776, 459818240, 1476304896, 51001180160の6個が発見されていますが、この6個しかないかどうかはまだわかっていないようです。


なんだ、「完全数」なんて「2倍完全数」とか「3倍完全数」とか「300倍完全数」とかいくらでも考えられる中の、単に「2」の場合に過ぎないじゃないか!

倍積完全数の定義を言い換えて一般化する

さらに広げてみましょう。

倍積完全数の定義

「約数の和が、自分自身のn倍に等しい」

は、

「約数の和と自分自身が n:1 の比になる」

と言い換えることができます。

ということは

「約数の和と自分自身が a:b の比になる(a,bは互いに素な正の整数) 」


と一般化できそうですね?


通常の完全数は(a,b) = (2,1) の場合です。100万までに4つあります。

3倍完全数は(a,b) = (3,1) の場合です。100万までに3つあります。


ここまでを踏まえて、こんな問題を考えることができそうです。

今回考える問題

1から100万までの数を「a:b = 約数の和 : その数自身」という比によってグループ分けする。
もっと多くのグループメンバーを持つ比(a:b)は何か。


これが、完全数の 2:1 が一番多くて、あとはみんなグループメンバーがそれより少なくなるようにバラバラになるなら、完全数は確かに注目に値すると言えそうです。

でも、そこそこメンバーを獲得するグループが多数出てくるようなら、完全数なんてそれらのグループの一つに過ぎないわけですね??


ということで。

調べてみました。1から100万までの数を「約数の和 : その数自身」という比によってグループ分けしてみました。

そのTOP10を発表したいと思います!

グループメンバーの多かった「比」ランキング!TOP10!

同率一位

(8 : 3), [84, 270, 1488, 1638, 24384]
(12 : 5), [30, 140, 2480, 6200, 40640]
(16 : 5), [420, 7440, 8190, 18600, 121920]
(32 : 11), [924, 2970, 16368, 18018, 268224]
(48 : 17), [1428, 4590, 25296, 27846, 414528]
(48 : 19), [570, 2660, 47120, 117800, 772160]
(52 : 15), [1260, 22320, 27000, 55800, 365760]
(56 : 15), [16380, 290160, 351000, 669600, 725400]
(64 : 23), [1932, 6210, 34224, 37674, 560832]
(80 : 29), [2436, 7830, 43152, 47502, 707136]
(112 : 41), [3444, 11070, 61008, 67158, 999744]
(144 : 55), [330, 1540, 27280, 68200, 447040]
(160 : 57), [1596, 5130, 28272, 31122, 463296]
(168 : 65), [390, 1820, 32240, 80600, 528320]
(216 : 85), [510, 2380, 42160, 105400, 690880]
(288 : 115), [690, 3220, 57040, 142600, 934720]
(304 : 111), [3108, 9990, 55056, 60606, 902208]

以上17グループ、グループメンバー数5で同率一位!


いや同率一位多いな!

しかも完全数の(2:1)は1位じゃないのかよ!


ということで。同率一位だけでTOP10は超えました。


どうやら完全数の(2:1)というのは特別メンバーの多いグループというわけでもなさそうです。

もちろん、特別メンバーの少ないグループというわけでもない(このランキングの下位には、メンバーになる数字が1つしかないグループが並ぶ)


つまり完全数というのは、今回考えたグループ分けの a:b = 2:1 のグループに注目したに過ぎない!

なんだ!やっぱり全然大した性質じゃないじゃないか!


…いや、メルセンヌ素数と一対一に対応するのは十分注目に値する性質な感じがします。タイトルでふざけてすいませんでした。

感想


ところで、グループメンバー数が多くなる「比」に全然脈絡がないように見えるのですが、何か法則が隠れているんですかね??


(8 : 3)
(12 : 5)
(16 : 5)
(32 : 11)
(48 : 17)
(48 : 19)
(52 : 15)


100万までで切っているので、もっと大きな数までやると違う並びになる可能性も大いにあるので、現状のこの並びには意味がないのですが、

とはいえ、何か「約数の和 : その数自身」という比として現れやすい比があるのかな?と。

どうでしょう。

不定方程式を解こう!

ベズーアプリアイコン

不定方程式って何?

不定方程式の話します!想定読者数学レベルは中学レベルです。

突然ですが、こちらの方程式を考えてみましょう。


10x + 13y  = 161

この方程式は「不定方程式」と呼ばれるものの一種です。

普通、文字が2つ入った方程式は式も2つないと答えが決まりませんが

この問題は式が一つしかありませんので、答えが定まらないという意味で不定方程式と言います。


実際、この問題は答えが無限にあります。


\displaystyle
y = -\frac{10}{13}x+\frac{161}{13}

と変形できますので、xにどんな数を入れても、それに合わせたyが決まります。

答えを整数に限る

それではあまりにも何でもアリなので

答えを整数に限ることにします。

すると、たちまち手間のかかる問題に変貌します。

実はそれでも答えは無限にあるのですが、


10x + 13y  = 161

を満たす整数xとy、すぐに見つかりますか…?

一つ見つけるだけでも案外大変なんですね。

なのでこの記事では、答えを一つ見つけることを目標にします!

解けない場合もある



10x + 12y  = 161


例えばこちらの方程式。

さっきとちょっと変わっただけですが、これに当てはまる整数x,yは存在しません。

10x+12yとして作れる数はすべて偶数なので、161は作れないんですね。

xとyは負の数でもいいことに注意してください。それでも161は作れません。

このように、解けない問題もあるんです。

なのでこの記事では、解ける問題に限って話を進めることにします。

解き方


10x + 13y  = 161

ここで一つお聞きしたいのですが

この問題、実はもう解けたという方、案外いらっしゃるのでは…?

こんなふうに考えると良さそうです。

      • 考えここから

10xの1の位は0。

161の1の位は1なので、13yの1の位を1にするしかない。

y=7とすると、13×7 = 91で1の位を1にできる。

この時点で式は

10x + 91 = 161

なので、x=7となる。

だから、答えの一つはx=7, y=7

(ああなんだ、10+13=23を7倍すればよかったのか)

      • 考えここまで

ということで、xとyの係数のどちらかが10だと、1のくらいに注目すれば解けそうです。


あまりに注目する

でも、係数に10がいてくれなかったら、今の方法は使えませんね。


12x + 17y  = 18

これだったらどうでしょう?

xやyは負の数でもいいことに気をつけてください。

1の位に注目してもあまり意味がなさそうです。

実は、先程やった「1の位に注目する」というのは

「10で割ったあまりに注目する」というのと同じことです。

例えば163÷10のあまりは3で、1の位の「3」が取り出せますよね。

今回も同様に「あまり」に注目してみます。

12と17のうち小さい方「12」で割ったあまりに注目します。

18を12で割ったあまりは6です。

「12x」を12で割ったあまりは必ず0なので、このあまり6は「17y」の方で作るしかないです!

ここで、17についても12で割ったあまりを考えます。

17÷12 = 1 あまり 5

なので、17 = 12×1 + 5 と書けて、

17y = 12y + 5y となります。

このうち「12y」の部分は12で割ったあまりに影響を与えませんので、

この5yで「12で割ったあまりが6になる数」を作ればいいわけです!

yに自然数を1から順に代入しながら12で割ったあまりを確認していくと…

5×1 = 5 → 5

5×2 = 10 → 10

5×3 = 15 → 3

5×4 = 20 → 8

5×5 = 25 → 1

5 × 6 = 30 → 6 見つかった!

ということで、y=6とした時に、17yを12で割ったあまりが6になります。これでy=6を確定させて良いとわかります。


この時点でもとの式はこうなってます


12x + 17 \times 6  = 18

あとはxを求めましょう。

17×6と18は12で割ったあまり同じなので、その差は12の倍数になっています。

なのでxは整数になるはずです!


18 - 17×6 = 18 - 102 = -84 = -(12×7)

ということでx=7とわかり、求める答えの一つは


x = -7, y = 6

と見つかります!

アプリ作りました

と、いうことで、こんな感じの問題をガンガン解けるアプリを作りました。

スクリーンショット

「ベズー計算トレーニング」です!

この形の整数不定方程式を「ベズーの等式」と言いまして、そこから名前を取っています。

Android:
play.google.com


iOS:

Bézout's Calculation Training

Bézout's Calculation Training

  • Ryuta Okada
  • Education
  • Free
apps.apple.com

6問解くまでのタイムアタックです!

慣れるまで結構難しいと思いますが、この記事で解説した考え方を使えばそこそこ速くなるはず!

実況プレイ

ちなみに私がやると、うまくいくとこんな感じで2分切れます

www.youtube.com


速い人がやった場合、既に1分を切ったという報告も受けています。すご…

合同式がわかる人向けの解説


12x + 17y  = 18

について、mod 12の合同式を考えると


0x + 5  y  \equiv 6 \\
5  y  \equiv 6

となります。

あとはyに自然数を順に入れていって、5yが6と合同になるyを探します。

yが見つかれば、xは自動的に決まります。

もっと詳しく知りたい方は…

こちらの記事をご紹介します。詳しいし、わかりやすいです。

mathtrain.jp

通分して足したら約分が発生する「分数の足し算」を量産する

はじめに

こちらのブログ記事に触発されまして、僕も考えてみることにしました。

今の僕の生活スタイルにおいては、小学生の方に分数の足し算を教える機会がままありますので、気になったのです。

分数の足し算で「約分」が発生する条件 - tsujimotterのノートブック

分数の足し算で「約分」が発生する条件(2) - tsujimotterのノートブック

目標設定

この記事の目標は

「足し算した結果、約分が発生するような分数の足し算問題を量産する」

ということにします。

例えばこういうものですね。

\displaystyle{ \frac{1}{10} + \frac{7}{6} = \frac{3}{30} + \frac{35}{30} = \frac{38}{30} = \frac{19}{15}}

2つの既約分数を、分母を最小公倍数に揃えることで通分し、分子を足した結果、最後に約分が発生するようなものです。

必要条件を調べていく

まず、求める「問題」を

 \displaystyle{\frac{a}{b} + \frac{c}{d} }

とします。 a,b,c,dは全て正の整数で、abは互いに素、cdは互いに素とします。

以下、abが互いに素であることを a \perp bと表すことにします。

bdの最大公約数をgとして、

b = gB

 d = gD

とします。

必然的に B \perp D, \, \, a \perp B, \, \, c \perp D, \, \,  a \perp g, \,\,c \perp gです。

bdの最小公倍数はgBDとなります。

すると、先ほどの問題を通分して足し算した結果は次のようになります。


 \displaystyle{\frac{a}{b} + \frac{c}{d}   = \frac{a}{gB} + \frac{c}{gD} = \frac{aD+Bc}{gBD} }


ここで、  \displaystyle {\frac{aD+Bc}{gBD} }素数 pで約分できると仮定します。

まず、分母gBDについて、

もし Bがpで割り切れるなら、約分できるためには aDがpで割り切れなければなりませんが、 B \perp D, \, \, a \perp Bと矛盾します。よってBpで割り切れない。

Dについても同様にpで割り切れない。

よってgpの倍数です。

 a \perp bつまり a \perp gBより、apで割り切れない。

同様にcpで割り切れない。



次に、分子 aD+Bcについて、

約分できるということはこれがpの倍数なので、

 aD+Bc \equiv 0 \pmod{p}

手順

ということで、以上の議論から、次のようにすれば、条件を満たす問題が量産できそうです。



1.
素数pを決めて


2.
pの倍数でない a,D,B,c
 B \perp D, \, \, a \perp B, \, \, c \perp D
 aD+Bc \equiv 0 \pmod{p}を満たすように決めて


3.
pの倍数g a \perp g, \,\,c \perp gを満たすように決めて


4.
  \frac{a}{gB} + \frac{c}{gD} を出題する



はい。


ただ、難しそうなのが2.ですね。

pの倍数でない a,D,B,c
 B \perp D, \, \, a \perp B, \, \, c \perp Dを満たすように

ここまでなら大したことはないです。例えば、別々の素数を割り当てて4つ全部互いに素にすればいいです。実際の条件はもっと弱いですが。

 aD+Bc \equiv 0 \pmod{p}

これが問題ですね。

改良

ということで、ここからは、これを満たす a,D,B,cの決め方を見ていきます。



以下、合同式はすべて \pmod{p}とします。


 aD+Bc \equiv 0を変形して

 aD \equiv -Bc



 D \perp pなので、DD^{-1} \equiv 1を満たす D^{-1}が存在します。

それを両辺にかけて


 a \equiv -D^{-1}Bc


 D^{-1}の計算は、「拡張ユークリッド互除法」を使って計算することができます。できるようです。

モジュラ逆数 - Wikipedia


ということで、 D,B,cを決めれば、apで割った余りが決まります。



あとはそれに、 a \perp Bを満たすまでapずつ増やしていけば、欲しい組み合わせが見つかります。

手順(改)


ということで、改めて手順をまとめるとこうです。



1.
素数pを決めて


2_1.
pの倍数でない D,B,c
 B \perp D, \, \, c \perp Dを満たすように決めて


2_2.
 a \equiv -D^{-1}Bc \pmod{p} a \perp Bを満たすaを決めて


3.
pの倍数g a \perp g, \,\,c \perp gを満たすように決めて


4.
  \frac{a}{gB} + \frac{c}{gD} を出題する


ということになります。

感想考察など


単にいくつかの素数を選んだら一つの「問題」がポンと出るようにできるともっと嬉しいですが、できるのか…?


なお、この手順で「約分が発生する分数の足し算」が全て生成可能かどうか(十分条件かどうか)はちゃんと検証しておりません。

全て生成可能な気はしています。多分必要十分条件になっているはず…。

必要条件ではあるはずだ(条件に当てはまらないものは生成されない)。




また、これが必要十分条件になっているとして、先程の

分数の足し算で「約分」が発生する条件(2) - tsujimotterのノートブック

に書かれている必要十分条件とどんな関係にあるのかは、僕のp進数についての理解が浅いためよくわかりませんでした。

僕の用いたa,c,B,Dあたりと、リンク先の記事にあるk,lあたりになにか関係がありそう。


ソースコードに落とし込んで実際に量産してみる


せっかくなので、今回の手法を使って「通分して足したら約分が発生する分数の足し算」を量産してみました。

https://dartpad.dev/bf5a7225bf5995e69cfe500a1af6968b


僕が最近普段使っているDartという聞き慣れない言語を使ってしまいましたが、何をやっているかは見て取れると思います。

コメントもつけていますし、変数名はこの記事と揃えてあります。

リンク先は実行環境とセットなので、コードを書き換えて色々実験することも可能です。

ただし、記事内の手法で生成可能な全てのパターンは網羅していませんのでご注意ください。

B,D,c素数しか入れてないし、aは最初に見つかった奴しか使ってないし、g=pに限定してます。

ロリポップレンタルサーバーでDjango??

もはやテーマがとっちらかっていて何を書いたらいいんだかわからなくなっているこのブログですが

まあ、いいや。

なんか混乱したのでその内容と、その解決の過程を備忘録として書き留めておこうと思います。

経緯

Webアプリを作ろうと思って、PythonのWebフレームワークである所のDjangoチュートリアルをやったはいいものの、

契約してるレンタルサーバー「ロリポップ」(スタンダードプラン)でDjangoが動かせるのかという問題にぶつかったので、

そもそも動くのか、俺は一体何をわかっていないのか、その辺の解決を試みます。

Djangoについては、ローカルでチュートリアルを一通りやりました。

Djangoのバージョンは1.11。「いってんいちいち」ではなく「いってんじゅういち」と読むほうが誤解がないです。1.9よりも新しい。

結論

読者の時間が無駄にならないように結論を先取りして書いておきますと

結局いろいろ調べたり試行錯誤した結果、レンタルサーバーでDjangoを動かすのはやめてVPSを契約することにしました。

レンタルサーバーでもCGI経由で動かすことはできるみたいだけど、そこまでするメリットがよくわからなかった。




ここから先は、僕の思考の時系列順に書いてます。


僕の経験値

5年前の2012年、PHPのWebフレームワークである所のCakePHPを使ってWebアプリを作ったことがあります。

解決したい疑問

CakePHPは普通に動かせたのにDjangoで困ってるのは何が違うからなの
CGIって何
ロリポップに「Pythonが使える」と書いてあるけど、どういう意味で「使える」の
・結局ロリポップDjangoは動くの



じゃあ一個ずつやっていきましょう

CakePHPは普通に動かせたのにDjangoで困ってるのは何が違うからなの

ロリポップPHP動かすのってめちゃくちゃ簡単なんですよ。

例えば、ロリポップFTPとかを使ってサーバー上に次のような hoge.php というファイルを上げる。

<?php
echo "Hellooooo Wooorrrrld";

で、上げたファイルのアドレスをそのままブラウザに打ち込んでアクセスすると、このPHPの実行結果が出力されます。

ファイルのパーミッションは644。全員Readができて、Writeは所有者だけ。eXecuteは誰も出来ない設定。

でも実行されてます。なんでだ。実行権限は誰にもないんじゃないのか。


まあとにかく。

PHPはファイルを上げるだけで実行できるんですよ。


対して、Pythonはどうか。


hoge.pyをアップします。

print("Goodafternoon world")

そしてこのファイルのアドレスをブラウザに打ち込んで直接アクセスすると…

500 Internal Server Error
※CGI もしくは SSI が正しく動作していません。


怒られました。

軽くググッた感じ、SSIの方は今日の記事とはあんまり関係なさそう。

CGIについてはあとで話題にしましょう。

ロリポップPHPについて

で、また調べを進めた所

僕のアカウントでのPHPの設定は「バージョン 7.1(モジュール版)」でした。

このモジュール版という所が多分、今日重要になってきそう。多分。


そこで、これを「バージョン 7.1(CGI版)」に変更してみました。



そして、先ほどのhoge.phpにアクセスして見た所…


…問題なく実行されますね。


(phpinfoを使って、Server APIの項目が Apache 2.0 Handler から CGI/FastCGI に変わったことを確認しました)


いや、その、仮説としてね


PHPはモジュール版だから実行できたのであって、pythonCGIを通して(?)実行する必要があって、だからPHPCGI版に変えたらさっきみたいに簡単に実行できなくなるんじゃないかって


思ったんですけどね。どうもそうじゃない。



CGIって何


ということで、やたらめったら出現する「CGI」というキーワードを調べてみます。

イメージ、なんかこう、15年くらい前にアクセスカウンターとか掲示板とかそういう周辺で見た言葉、っていうイメージ。


CGIとは、Common Gateway Interface の略。Wikipediaによると

ウェブサーバ上でユーザプログラムを動作させるための仕組み。

だそうです。

「…はぁ。え、CGIはそういうものの一種ってこと?それともそういうもの全般をCGIと総称するの???」などと思いましたが

前者でよさそうです。CGIはそういうものの一種。

ロリポップでは、.cgiファイルをアップロードしてブラウザでアクセスすれば実行されるっぽい。


んでまあ軽くググッた感じ、
Perlで書くことが多い
・拡張子は.cgi
・一行目には、使用したプログラミング言語へのパスを書く

最後の奴がわかりにくいですが、ロリポップのマニュアルにちゃんとパスが書いてありました。


ということで、とりあえず何もしないプログラム fuga.cgi を書いて、実行してみよう。

#!/usr/bin/perl

(パーミッションは700、ロリポップ推奨)

500 Internal Server Error
※CGI もしくは SSI が正しく動作していません。

なんでだよ!!


ということでいろいろ試行錯誤したり調べたりしながら、ようやく「動作するコード」に辿り着きました。

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "fugafugafugafugaaaa";

これで、最終的にブラウザに「fugafugafugafugaaaa」が返ってきました。この2行目がないとサーバーエラーになる。

CGIの動き

つまりこういうことらしい。

基本的には.cgiファイルに好きな言語のコードを書くんですが、そのプログラミング言語さんに渡す前後にCGIさんを経由するので

CGIさん用の指示が必要になる。

全体の流れとしては、まず往路

.cgiファイル → CGI → プログラミング言語

この過程では、CGIさんは.cgiファイルの一行目に書いてある宛先(プログラミング言語のパス)を確認し、二行目以降を渡す。

今回の場合はPerlさんがそれを受け取って、実行。出力は次のようになる。

Content-type: text/plain

fugafugafugafugaaaa

次は復路

プログラミング言語 → CGI → ブラウザ

ここでCGIが一行目を見て「あ、これはただのテキストなのね。音声とか画像ではないのね。」と確認し、適切な形でブラウザに返す。

さっきエラーになった時は、この「これはテキストですよ」という一行目がなかったんですね。これを「ヘッダ」というらしいです。


なるほど。

よし!

ここまでわかればpythonも動かせるはずだ!

#!/usr/local/bin/python3.4

print("Content-type: text/plain\n")

for i in range(10):
	print(i)


これはちゃんと動いた!!!!(パーミッションで実行権限を付け忘れてエラー出て小一時間悩んだけど。)

ロリポップに「Pythonが使える」と書いてあるけど、どういう意味で「使える」の


とりあえず、CGI経由で動かせることはわかりましたね。


てもこれで、どうやってDjangoをインストールしたり動かしたりするのかはまだまだわかりません。


ここでSSHという機能を有効にしていろいろ試してみましょう。


SSHは、Secure Shell の略で、めちゃくちゃ簡単に言えば、コマンドプロンプトやターミナルからサーバーにアクセスする方法のことです。


コマンド入力でいろんなことができます。


ロリポップの管理画面からSSH設定を有効にして、

ssh -l ユーザー名 -p ポート番号 ホスト名

で接続成功。


"vim" やら "python" やら普通に使えるので、.pyファイルを作ってコマンドから実行とか簡単にできました。

なるほど、こういう意味でも、サーバー上でpythonを「使える」わけだ。



さて、こちらの参考文献によると

noppiki.hateblo.jp

curl や pip が無くて困ってる様子なんですが

今確認した所によると、既に入ってるようです。

pipが使えれば、python関係の好きなモジュールがインストールできるはずで、Djangoのインストールも瞬殺では??


ということでやってみよう。

python -m pip install Django

…。


だめ。Permission Error.


そうか〜〜〜



chmodも試したけど、弾かれました。まあそりゃそうだ。これで変えれたら意味がない。sudo は command not found. なるほど。



どうも調べると、こういう時は、--user というオプションを使えばいいっぽい?

やってみましょう。

python -m pip install Django --user


……うまくいきました!!


案外、SSHでこの調子でやっていけば、ロリポップDjangoちゃんと動くのでは?

結局ロリポップDjangoは動くの

では、ここからはこのマニュアルにそってやっていきましょう。

Django をデプロイする | Django documentation | Django


WSGI という仕組みを使って、サーバー上でDjangoを動かすことになりそうです。


CGI ではなく WSGI を使う」という理解でよさそう。多分。


ロリポップサーバーはApacheというソフトで動いているので、Apache上でWSGIを使うには mod_wsgi というモジュールを使うことになりそう。


新出単語が多くてアレですが、まあ、そういうことみたいです。


……



さて。そうして2時間くらい経ちましたけれども


ロリポップApacheに mod_wsgi をインストールして有効化する方法が全然わかりませんね。


Apacheまわりの設定が全部書いてある httpd.conf というファイルをいじる必要がありそうなんですが


ロリポップだろうとさくらレンタルサーバーだろうと、httpd.conf はいじるどころか中身見ることもできないみたいです。


あれ?じゃあデプロイできなくね????どうすんの?????無理なの???



……


どうも、下記のページたちによると

さくらのレンタルサーバでpyenvとDjangoを動かす « chibiegg日誌
さくらサーバのスタンダードでPython3.5 + Django1.9を動かす | しましまくろっく
qiita.com


結局、CGI経由で入れるしかないみたいです。WSGIではなく。


CGI経由だと、アクセス(リクエスト)がある度にpythonを起動して処理して、ってやるから反応が遅くなるみたいですね。

(WSGIのデーモンモードならpythonを起動しっぱなしにできる)


まあ、安いレンタルサーバーですから、それは仕方ないのでしょう。



ということで、長いことかかりましたが、

CGI経由でDjangoを動かす


やっていきましょう。



Djangoのプロジェクトの中から、「最初にこれを起動しさえすればいい」みたいな.pyファイルを見つけて、そいつをcgi経由で実行すれば済む話

…なら、簡単にいく気がするんだけど、そもそもDjangoってリクエストを受けた後どういう仕組みで動くんでしょうね。


URLディスパッチャがURLに合わせたビューを呼ぶ、ってのはわかってるんだけど


今話題にしてるのは、もっと前段階の話だよね。


もうちょっと悪あがき

いや、待って待って

Djangoってのは、WSGIを使って実装するように設計されているわけで、


CGIを経由してDjangoを動かすというのは

まあ言ってみれば邪道なわけですよ。

CGIで動かすと、パフォーマンスも下がるらしいし。

なんとかCGIを使わずに普通にWSGIで動かす方法はないものか。


ということで、httpd.conf の代わりに .htaccess をいじることでなんとかならないか調べてみました。

.htaccesshttpd.conf よりも下位にある設定ファイルで、.htaccess なら、レンタルサーバーでもいじることができる!


…ということで調べてみたんですが



.htaccess に書ける範囲の内容では、mod_wsgi を有効化することはできないみたいですね。


httpd.conf に LoadModule という行を書いてやる必要がある。



はい。ということで。ダメです。CGIを経由するしかなさそう。


レンタルサーバーや〜めた!VPSにしよう!!


はい。


突然ですが、完全に僕の知識不足であれだったんですが

いろいろ調べているうちに、そもそもレンタルサーバーではなく、VPSというサービスを使うと、httpd.conf をいじれることがわかりました。


VPSというのは、Virtual Private Server の略で、レンタルサーバーよりも自分で触れる範囲が広い(自分で触らなければならない、とも言える)


もらえる権限が大きい代わりに責任も伴うわけですね。


そもそもApacheのインストールから自分でやるみたいです。



そうか。


おとなしくこれ使えば、邪道な方法を取らずともDjangoアプリを作れるわけか。


しかも値段も安いとこを使えばレンタルサーバーと大して変わらないみたい。



ということで。


レンタルサーバーでDjangoを動かすのはやめて、VPSを契約することにしました。



追記(2018-04-25)

ちなみに、こうしてVPSを契約してDjangoを動かして作ったサービスがこちらです!

岡竜之介の大喜利道場

よかったら遊びに来て下さい!!


それから、この記事を書いた時には知らなかったのですが

Firebase や Heroku といったサービス上でDjangoを動かす手がありますね。

サーバーの管理をそこそこ自分でやらなきゃいけないVPSと違って、手軽でいいかもしれません。

一方で、その分カスタマイズ性が低く、かゆいところに手が届かないといったことは起こるかもしれませんね。

参考までに!

以上!!