• ロシア人義勇兵がドンバスの戦争を煽った

    10 Years Later, Russian Volunteer
    Fighters Recall Fueling the War in
    Donbas

    を500字で要約

    2014年春、数千人のロシア市民がドンバスの親露民兵に加わり、ウクライナ東部の武装蜂起に参加した。ロシアは直接介入を避け、民族主義・準軍事組織を通じて志願兵を募集・訓練・派遣し、否認可能性を保った。志願兵の動機は、マイダン革命後の親西側政権を不当と見なし、ロシア語話者の権利侵害や「ノヴォロシア」復興への思いだった。
    サンクトペテルブルクの画家クラスノゴロツェフらが国境を越え参加。戦争のきっかけは4月12日。元FSBのイーゴリ・ギルキン(ストレルコフ)率いる武装集団がロシアからウクライナに入り、地元勢力と共にスロビアンスクの行政庁舎を占領して市を制圧した。
    翌日からウクライナが対テロ作戦を開始。
    ギルキンは「戦争の引き金を引いた」と自認し、参加者も彼らの役割が決定的だったと証言する。
    ロシア帝政運動などの組織が数百人を募集し、ロストフ経由でスロビアンスクへ送り込んだ。
    装備は貧弱で、古い武器で戦った。7月にスロビアンスクを放棄後、イロヴァイスクなどで戦闘。
    8月にロシア正規軍が「休暇兵」として介入し戦況を逆転、ミンスク合意に至った。志願兵の多くはこれを「機会損失」と批判する。2022年の本格侵攻後も一部は戦い続けている。

  • Yevgeny Prigozhin’s “interview”. 23 June 2023

    Stanislav Lvovsky

    Stanislav LvovskyFollow

    16 min read

    ·

    Jun 24, 2023

    Original video || Russian transcript

    Yevgeny Prigozhin, a Russian warlord (Wagner Group), initiated something of an armed rebellion against Putin’s government last night. Yesterday, he recorded a half-hour video — a monologue on the state of the Russian military, the war in Ukraine, and more. Here’s the transcript, made using Whisper AI and translated with the help of GPT-4. Some limited proof-reading and editing were done, but there may still be a number of inaccuracies and/or errors.

    Prigozhin’s look-alike. [Midjourney v. 5.2]

    Disclaimer:

    I personally loathe the speaker, Prigozhin, who has been a career criminal of the lowest kind, a thug, a torturer, and now, above all, a war criminal. He is known to be an active perpetrator of crimes against humanity and mass murder during the unlawful war launched by the Russian Federation against Ukraine. That said, this text is firstly an impressive document, albeit maybe trivial for those familiar with the history of military coups like the one unfolding now. Secondly, it is, I believe, quite instrumental for understanding the context of current events.

    ….

    So, let’s start with how the so-called special operation began. In 2014, a military coup occurred, a rebellion in Ukraine, Russians were being oppressed, Russians went to Donbass, and we held our ground in Donbass. After we defended Donbass, we were supposed to move out in the autumn of ’14 and secure the lines of Slavyansk, Kramatorsk, and so forth along the border of the Luhansk People’s Republic (LNR) and Donetsk People’s Republic (DNR), but this was not done, a full stop was put because the army was unsure whether they could handle it and there was no willful decision made. Therefore, the fate of Donbass remained in limbo. From ’14 until ’22, Donbass was being carved up. Donbass was being pillaged by various people, some of them were from the presidential administration, some from the Federal Security Service (FSB), and some were attracted oligarchs, like Kurchenko. These are the people who stole money from the residents of Donbass, who were in the unrecognized republics of LNR and DNR.

    In this LNR and DNR, there were People’s Militia corps, which were supposed to put up a decent resistance in case of an attack by Ukrainians. However, these corps did not exist, in fact, there was a minimum number of fighters and a certain number of generals just embezzled these funds. With a salary of 40 thousand, 20 thousand was left in the caste, 20 thousand was given to the one who signs, if the fighter existed and sits at home, no training was conducted, and ‘dead souls’ simply received this money, generals got money for these ‘dead souls’ and budgets were plundered. Donbass was a wonderful place, where money was being embezzled like the staff of the president’s administration. At first, it was Surkov, then it was the Kazakh, the FSB also had a very clear hierarchy of generals.

    Now, as for why the special operation started. The Ukrainians had a grouping that was on the borders with the territory of Donbass, precisely the one we were breaking through from Popasna to Artemivsk. This group consisted of various voluntary, so to say, nationalist formations, and also consisted of the active Armed Forces of Ukraine (AFU). This group was exchanging fire. We were shooting at them, they were shooting at us, and this was happening for all these long 8 years from ’14 to ’22. Sometimes the number of different shootouts, roughly speaking, the exchange of ammunition, the exchange of shots, sometimes increased, sometimes decreased. On February 24, there was nothing extraordinary. Now the Ministry of Defense is trying to deceive the public, trying to deceive the president and tell the story that there was mad aggression from Ukraine, and they were about to attack us together with the entire NATO bloc. Therefore, the special operation, so-called on February 24, it started for entirely different reasons. Now about the army. The army, starting from ’12, — it all started earlier, with Serdyukov, — but starting from ’12, when Shoigu was sent there, the army was doing nothing. Each conscript was given three rounds of ammunition, like in the worst Soviet times, although even in Soviet times it was not like that. They did not engage in combat training, they were not trained on various types of weapons, especially modern ones, — and therefore the army in Russia was in such a poor state that it could not carry out any large-scale combat operations. Shameful campaigns like the Syrian one, where private military companies (PMCs) performed the main task, and the military flew planes, absolutely shameful boorish things that they, we did in Syria, like crossing the borders of neighboring countries on planes, which all the commanders warned Shoigu and Gerasimov about multiple times, — they did not give the army any combat experience. A huge number of generals adorned themselves with Hero of the Russian Federation stars like a Christmas tree, most of whom never went anywhere in their lives, they received the Hero of Russia simply for once flying from Moscow to Khmeimim on a comfortable plane with a leather interior and a polished table and then returning. For this, they received the star of the Hero of the Russian Federation. They discredited the rank, they destroyed this rank. Clowns, who all day long were licking the ass of the Minister of Defense and his entourage, — they were getting the next military rank and awards. Under Shoigu, the soldier ceased to exist as a creature whose word can be said, whose opinion can be heard. Therefore, the absolute lack of training in the army, lack of management, lack of weapons, and many other factors met the Russian army on February 24, ‘22.

    Get Stanislav Lvovsky’s stories in your inbox

    Join Medium for free to get updates from this writer.Subscribe

    Remember me for faster sign in

    The whole operation was kept secret. Those commanders who were supposed to manage the most serious directions in case of, strictly speaking, a war that was unleashed, they were not aware of what was happening. Victory maps, like in the times of the Great Patriotic War with beautifully drawn markers and pencils, decorated with arrows, were carried to the Minister of Defense Shoigu by those who had never held a weapon in their lives. And so, the outcome was what it was. Now the basics: why the special operation began. The beautiful story of demilitarization and denazification of Ukraine. It would have been possible if the regime had been changed within three days, although from how deeply I am immersed in this story, Zelensky, when he became president, was ready for any agreements. All that needed to be done was to descend from Olympus, go and negotiate, because all of Eastern Ukraine is populated by people who are genetically Russian, and therefore what is happening today — we are going to kill these genetically Russian people. So, a badly planned operation, exercises conducted beforehand — and for some reason, a bunch of idiots decided that they were so crafty that no one would understand what they were doing during the exercises, and no one would stop them when they went to Kyiv, and no one would have stopped if these degenerates hadn’t built long columns, hadn’t given 0.2 combat loads for each type of weapon (0.2 combat loads is a few hours of combat) and hadn’t sent barefoot and unarmed soldiers towards Kyiv and other areas. No state, as I’ve said many times, has that kind of defense at its borders that can withstand the penetration of an army, even if it is coming with one round, so they immediately jumped onto the territories where they are now, reached Kyiv, hovered around Kyiv, instead of making urgent decisions and moving on, they just left, and they were not enough. And he cowardly sat in his office, and at the end of the first day, he was very surprised why the thousands of missiles that were launched, which struck without having proper intelligence, without having anything, just hit anything, why the troops cannot advance, then the ruthless throw of airborne troops under Gostomel — guys who flew in and died, guys didn’t know what they were doing, what their tasks were. They knew that they had to stand there and do their duty.

    So, in the first days of the war, Shoigu destroyed thousands of Russian soldiers, he ruined the most combat-ready part of the army, and the combat-ready part was a very small part of the army, because for many years the army had nurtured sycophants, and any active person either left the army or was ready to leave immediately. When the disgrace of the special operation began in the first days of the Russian troops, running out of ammunition on the territory, they didn’t understand what to do, and I asked many officers and generals why this happened, and they all said, these scum, I underline, they said the word scum, referring to the military-political leadership of the country, they didn’t tell us where we were going, and the Ukrainians, knowing about the exercises, undoubtedly mobilized minimum forces, undoubtedly gave people in Kyiv weapons, and instead of coming, if we needed it, press the country’s top leadership, take on our side those who can make decisions, and immediately propose agreements, saying, we have been under Kyiv for a day, we will move on, move on and move on, but now we have the opportunity, let’s agree, first crisis committee, we put our people in this crisis committee, discuss the fate of Russian citizens, and then the Ukrainians will be forced to make concessions, mentally ill scum, mentally ill bastards decided, nothing terrible, we will throw a few more thousand Russian guys into the meat grinder, they will die like dogs under the fire of enemy artillery, but we will achieve our own, and this is also an option, and so you can also do, if you are ready to answer for your words, if you are ready to go forward to the end, but they are not ready to go to the end, they want to live in comfort, they are not ready to go bury their relatives in the cemetery, as thousands of mothers and thousands of sons and daughters of their fathers bury, so the war went into a protracted character, instead of gathering all together, making a table for 50 people, call all generals, all people who can give some advice, some explanations, we still have isolation in the country, and so no one of the decision makers gathered, they all negotiated over the phone, and when I began preparing the Wagner PMC unit at the beginning of the special operation, because perhaps we would need to urgently fly out of Africa, it was already known at the end of February ’22, when I gathered the operational group in my office, to track what was happening, it was clear that there was a monstrous, shameful defeat of our soldiers, soldiers were dying, soldiers were being hit mercilessly not only in their lives but also in reputation, African leaders began to massively contact me, and everyone asked one question, how could Russia fall into such monstrous disgrace?

    The second most powerful army in the world, as it was so hyped, of course it was understood that it was not the case, it was a bubble, but at least something could be shown from it. The shame was that Russia got into such a deep mess, everyone was counting on a miracle, on tactical nuclear weapons, on a nuclear bomb that is about to be dropped on Warsaw, but they lack the guts, the old guys are too weak, they can’t get out of their comfort zone, at that time I was still allowed to come to Frunzenskaya Embankment in the General Staff. Shoigu feasted at his table every day, he had just as festive lunches that he holds every day from one to two, where all the deputies gather, the tables are breaking from caviar and cognac, he also entertained guests, gifts, in the middle of March we were called to war, Shoigu hid, he was not seen, this was a trembling old man who was thinking about how to get out of this situation, and at this moment he should have been thrown into the scrapheap of history, and wait for him to be judged and punished for the fact that by that time he had already destroyed tens of thousands of lives of boys, the first deserters appeared, to make sure that no one would know about them, they began to terminate contracts retroactively, and in the end, the military who received salaries for years, who received apartments, who lived at the expense of the state, at the expense of ordinary guys who worked at the factory, on the tractor or somewhere else, these military men went home, there was no concept of what desertion is, and after that these guys who maintained these military for years, they were taken, put under the gun and made them mobilized, and now let’s stop from the mobilized, why was the war needed, the war was needed so that a bunch of creatures could just celebrate and publicize, showing how strong an army they have, so that Shoigu could become a marshal, this decree was already prepared and he received the second star of a hero, because he very much wanted to go down in history as a great Tuvan military leader who became a double hero and a marshal in peacetime, the war was not needed to return Russian citizens to our bosom and not to demilitarize and denazify Ukraine, it was needed for the sake of one star with additional embroidery around the perimeter, so that one mentally ill person, when he lies in the coffin, would have this star brought on the pillow. That’s the first thing.

    And the second thing — the war was needed by the oligarchs, it was needed by that clan, which today effectively runs Russia. This oligarchic clan — it gets everything that’s possible. If this clan’s overseas businesses are being shut down, the state immediately divides the domestic businesses and hands them over to them. That’s why businessmen are being jailed, banks are being closed so that the clan doesn’t lose its money volumes. They don’t need money, they have long since done everything for themselves, clinics with special equipment, in case God forbid they get cancer and everything else, to live as long as possible, this is the oligarchic elite, it only thinks in one thing, how to wire its body as long as possible, and for the body to be in as good a condition as possible. This is their brain disease, they don’t think about the country, people, war, anything but themselves. So, the second most important task of the operation was the appointment of Medvedchuk as the president of Ukraine by some president. That very Medvedchuk who had already sneaked into Kyiv in advance, sat and waited for the troops to come, Zelensky to flee, everyone to lay down their arms and he would become the president of this Ukraine. The task was in material assets, which would have to be divided after they take it under control and it would be nice to punish Zelensky’s regime, it would be nice to punish the Americans for what they did with the coup in Ukraine in ’14, but for that there was plenty of time, which was missed. I’ll come back to this, but now we’re talking about material values, about financial resources, because they were stealing in Donbas in bundles. But they wanted more, they decided to put Medvedchuk. Medvedchuk was arrested, he was exchanged for all of “Azov”. But if we want to denazify Ukraine… Azov — it’s the basis of the nationalist structures of Ukraine. Why did we exchange him? Why is he so dear to us, why didn’t we shoot “Azov” — and the main question: why didn’t we exchange “Azov” for the captive fighters, for the soldiers, — but exchanged for this carrion, for Medvedchuk, who has everything, that is — good friendly relations, let’s say, in the country’s leadership?

    After we took over the Kherson and Zaporizhia regions, the first thing that happened was that bulldozers, metal, and so on started to be massively pulled out of there. When we took Popasna and put a guard on the factories, — if we took these factories and didn’t destroy them, then why not work on them? People came there, started dismantling the equipment and taking it towards Russia. Artemivsk champagne factory, which we managed to save, — just because it happened so accidentally: when we took these mines, there were small shootouts, and the Ukrainian units just ran away for fear of being destroyed. So, the Artemivsk champagne factory — we took 10–15 bottles from it for souvenirs and sent two cars to Ukrainian women. Everything else was left in place. Decisions are already being made today about when it will be launched. But why on earth would it be launched? Who will it belong to, who will it bring profit to? Certainly not the people of Donbas. A hundred percent there will immediately be an owner who will be sawing off these funds, and therefore everything that happened, our sacred war with those who offend the Russian people, with those who try to humiliate them, turned into a simple racket, or rather into ratting, elevated to the level of law, to the level of national ideology.

    On March 19, I first arrived in Ukraine. I asked the commanders on the ground why we weren’t reporting the number of our soldiers killed or wounded. I was told that the higher-ups weren’t interested in such details: there was a mission that needed to be accomplished. The body count would be addressed later, after the war. No one was interested in what measures would be taken to achieve victory. By the time we arrived, talking about victory was impossible as progress was minimal. In order to gain control over Ukraine, we had to either capture Donbass, reach the left bank of the Dnieper, or take over the entire country, excluding Lviv and Western Ukraine — or including Lviv, that’s another story. Alternatively, we just needed to replace the leadership. We failed to change the leadership, and it was clear at that time that we wouldn’t capture Donbass with the resources we had. Every day, there was a need to report an advance of 50–100–200 meters. There was no control, just continuous hysterics, the state of our arms was a complete mess, it was chaos everywhere, absolute mayhem. If it weren’t for this chaos, instead of ten people dying, it would be one. But ten died instead of one. Someone has to answer for the lives of these soldiers. They didn’t come back home — some were buried, but a huge part are those who went missing. Every day, relatives of various soldiers write to me asking questions — soldiers not associated with the PMC. The number of missing persons we witnessed was simply impossible. They were discarded like meat because there was no way to retrieve them from the field — and this is still being covered up. The incompetency of the General Staff is a separate story. From the very first days, there has always been a running joke among the soldiers, officers, and generals: the one thing needed to win the war is to shut down Frunze. If any unit achieved any results at the front, it would immediately be split in half: one part was supposed to continue offensive operations — clearly, they couldn’t manage it — and the other half would be relocated to a different sector of the front. Why was this done? We all believe it’s due to sheer stupidity. Because the Chief of the General Staff and Shoigu themselves manage all operations. If a general thinks something should be done differently, they’ll still be made to shut up and told what to do. If he disobeys, like Muranov (?) and other generals did… If he obeys, a great number of people will die. But it will be overlooked, because he’s obedient. These remnants of military units were shuffled from place to place “for reinforcement”. As a result, there isn’t a single brigade or division that could fight at full strength; everything is mixed up. This causes a complete lack of control. Since there is no control, every military leader has their own answer to the question of why this or that task wasn’t accomplished. Eventually, to avoid having the Chief of the General Staff consumed by paranoia, shouting and trying to fire people — and there is a chain of command, first it’s the Chief of the General Staff, then the Minister — they first fire you, then you have to apologize to them, assure them that you will continue to serve loyally, humiliate yourself, as happened, by the way, with Teplinsky. In the end, you remain on the defensive. This lack of control doomed 80 percent of the soldiers who died in this war.

    Next up — ammunition. It’s important to understand that for Russians in general there is enough ammunition. It’s stored in warehouses, and it’s only not issued for one reason, because, again, low-skilled people believe that this ammunition should stay in the Moscow region, just in case, if by some accident they themselves might be affected. And so, if you took ammunition worth 5 million, you would have to pay an insurance fee, colloquially known as “the coffin 5 million”. The ratio is absolutely identical, but generals believe that there are plenty of people. The generals who make the decisions — not those who are actually fighting on the ground. That’s why soldiers are sacrificed instead of using ammunition.

    With Wagner, it’s a separate story. They didn’t provide us with ammunition in order to wipe us out, because they fully understood that we would remain the force that wouldn’t be brown-nosing the military leadership, which is sending soldiers to their graves. They tried to wipe us out in Bahmut, but it didn’t work. We got out of Bahmut. They tried to mine our exits — it didn’t work. Everything was aimed at annihilating the Wagner PMC. They still hope that they can win this war. But since there’s no control, no military successes, the Ministry of Defense leadership carefully deceives the president, and he gets reports that in no way correspond to reality.

    Two narratives are being shaped: one on the ground, the other on the president’s desk. That’s why we hear all day about 60 destroyed Leopards, about 3,000 eliminated enemy soldiers. When you destroy a Leopard, you send up a drone and film it. It stands still, burned out. The videos that have widely circulated in the media are the only case when the Ukrainians ran into our air force. It was all calculated in advance: first the air force, then the infantry struck them, and two Leopards were destroyed, plus one T-72 there, plus several Bradleys. All of this is shown from different angles. Nobody destroyed 60 Leopards, it’s total utter nonsense. Shoigu lives by the principle of “survive”. For a lie to be believed, it must be monstrous — and therefore, there are deceptions. Two realities. On the ground now, today, the Russian army is retreating in the Zaporizhzhia and Kherson directions. The Ukrainian Armed Forces are pressing the Russian army, we’re washing in blood, nobody gives reserves, there’s no control at all. But then the Chief of the General Staff, after a glass of vodka, screeches into the phone like a market woman, like a pig, demanding to regain positions. And all the commanding officer can do is to say that everything has been reclaimed. And to draw a red line on the map a few kilometers north of where it actually is today. Therefore, what they tell us is a profound deception.

    We will only face the fact at the moment when it becomes as it already was at Krasnyi Lyman, in Kherson, and in many other places. These scumbags, realizing that they’ve lost a colossal chunk of territory, will gather and declare that they have regrouped and retreated to more advantageous positions. The same thing is happening in Bahmut: the enemy is penetrating deeper and deeper into our defense. The enemy doesn’t kill their soldiers, the enemy conserves equipment. The only thing the enemy doesn’t economize on is ammunition. Therefore, soldiers die or leave with injuries. And every injured soldier won’t be able to pick up a gun tomorrow. Time is rapidly collapsing.

    Ukraine War

    Russia Ukraine War

    Prigozhin

    Russia

    Putin

    Stanislav Lvovsky

    Written by Stanislav Lvovsky

    154 followers

    ·109 following

    Poet, cutural historian, luftmensch, DPhil, researcherFollow

    No responses yet

    Unknown user

    Write a response

    What are your thoughts?CancelRespond

    More from Stanislav Lvovsky

    On a poem by Fyodor Tyutchev

    Stanislav Lvovsky

    Stanislav Lvovsky

    ·

    Dec 21, 2024

    On a poem by Fyodor Tyutchev

    Socratic self-dialogue (no conscious entities involved)

    6

    AI fiction no longer betrays itself on the surface — but its structure still does. On alignment, the machine’s missing clock, and why the human job is to be rare.

    Generative AI

    In

    Generative AI

    by

    Stanislav Lvovsky

    ·

    Jul 22

    Imagination, Aligned

    What AI can and can’t do with a story — and what is actually under threat

    749

    Why ChatGPT Keeps Telling You the Same Story (And a Clever Trick to Fix It)

    T3CH

    In

    T3CH

    by

    Stanislav Lvovsky

    ·

    Feb 11

    Why ChatGPT Keeps Telling You the Same Story (And a Clever Trick to Fix It)

    A new study from Stanford and Northeastern reveals why AI language models became so predictable after safety training — and offers a…

    50

    MIT’s AI committee rejects detectors and lockdown browsers. The real worry is isolation, not cheating — and four assumptions the report never argues.

    Stanislav Lvovsky

    Stanislav Lvovsky

    ·

    Sep 1

    MIT’s AI Education Report Isn’t About Cheating

    What the report gets right about isolation and trust, and what it assumes without arguing

    5

    See all from Stanislav Lvovsky

    Recommended from Medium

    Elderly man sitting at a wooden table, working on a laptop indoors.

    The Daily Draft

    In

    The Daily Draft

    by

    Matt Lillywhite

    ·

    Jul 7

    I’ll Instantly Know A Writer Used ChatGPT When I See This

    It’s pretty damn obvious now that I know what to look for.

    31K1311531

    10 Websites Better Than Another Hour of Doomscrolling

    The Sunday Journal

    In

    The Sunday Journal

    by

    Rafia Naseem

    ·

    Jul 18

    10 Websites Better Than Another Hour of Doomscrolling

    Here’s to the rabbit holes worth taking!

    17.7K464303

    Carl Jung Warned: There Are Only Four Things to Worry About In Life

    The Academic

    In

    The Academic

    by

    Andy Murphy

    ·

    Jul 7

    Carl Jung Warned: There Are Only Four Things to Worry About In Life

    The first is easy to fix. The second is hard to notice. The third is tough to say. The fourth is difficult to confront.

    9.3K25486

    Has America Crossed the Asshole Threshold?

    Carlyn Beccia

    Carlyn Beccia

    ·

    Jul 3

    Has America Crossed the Asshole Threshold?

    Civilizations can carry a surprising number of parasites and live. But there’s a line — Rome crossed it, the Gilded Age toed it, and for…

    17.3K29598

    The “What Do You Offer?” Trap: Why Modern Men Don’t Need Women Anymore.

    Alena McRey

    Alena McRey

    ·

    Sep 9

    The “What Do You Offer?” Trap: Why Modern Men Don’t Need Women Anymore.

    I spent years going on dates, and it always followed a certain pattern. Until one day, a man across the table looked at me and asked the…

    6.9K36823

    A colourful Chinese temple with trees and a blue sky.

    Globetrotters

    In

    Globetrotters

    by

    Liam Hunter-Bailey

    ·

    Aug 4

    I Spent 2 Weeks in China. I Won’t Be Back.

    My honest experience visiting a country I desperately wanted to love

    14.1K47934

    See more recommendations

    Help

    Status

    About

    Careers

    Press

    Blog

  • ロシアのウクライナ侵攻について

    上記主題について一般的な見解として、侵攻直後であるの古い記事であるがテレ東BIZ・BBC・朝日新聞の記事をまとめると主に下記の通りです。

    と記事レベルではこれだが、NATO拡大阻止やウクライナ東部の確保は、ロシアの目的の一部として重要だが、それだけでは2022年の全面侵攻という規模の行動を十分に説明できないできないと思い、持論をまとめてみました。

    私なりにロシアのウクライナ侵攻の目的を整理してみた

    1.民主主義の破壊

    ウクライナの民主主義が維持され、例えばポーランドのように経済発展を遂げた場合、地下資源に依存するロシアの国民の間で「取り残されている」という焦燥感が蔓延し、現在の体制が崩壊する可能性がある。最悪の場合、ロシア国内における民族自立の機運が高まり、ロシア自体の崩壊につながる危険性すらあるだろう。そのため、できればベラルーシのようなロシア協調型の独裁政権を樹立し、民主化を後退させたい意図があると推測される。

    また、ロシアが最も警戒する過激な民衆デモについても、ベラルーシにおいてすでに抑え込んだ実績がある。

    要するに、かつてのヤヌコビッチ政権よりもさらに強力な親露政権を樹立し、要請があればいつでもロシアが軍事介入できる状態を作り出すことが狙いだ。

    一連の流れとしては以下のようになる。 ロシアによる侵攻 ➔ キエフの占拠 ➔ ロシア寄りの臨時政権の樹立 ➔ その政権のもとで大統領選挙の実施 ➔ 親ロシア派大統領の誕生 ➔ 同政権下で、ロシアへの領土割譲、ロシア語の公用語化、NATO非加盟・中立国化を国民投票で決定し、憲法改正を行う。

    参考

    2.ロシア中心の経済圏の再構築

    プーチン大統領はウクライナのEU加盟に反対しない姿勢を示しているが、実際のところはどうだろうか。

    項目1のような親ロシア政権が樹立された場合、まずEUへの加盟を進めることはないと考えられる。さらに、EUへの加盟には民主主義国家であることが条件として求められるため、EU側からも加盟を拒否される可能性が高い。

    その結果としてウクライナがロシア主導のユーラシア経済同盟に再加入。その後、経済同盟は中国やインド、イランとも提携することで、ロシア中心の経済圏の再構築を図るシナリオが考えられる。場合によっては、国連を脱退してロシア中心の新たな国際連合体を創設する意図すらあるのではないか。

    参考

    「ウクライナ後」に想定すべき新経済圏「中ロ・ユーラシア同盟」の不気味な潜在力(上)

    3.国際秩序の低下

    ロシア自身にも、国際法そのものを完全に無くしたいという意図まではおそらくないだろう。
    しかし、今回の侵攻に見られるような独自の理由付けがまかり通る世界を構築できれば、武力侵攻がより容易になる。その結果、国家間の紛争が各地で起これば、軍事力の高いロシアの存在意義や影響力がさらに高まるのではないか?そのような推測に基づくものである。

    ロシアの情報工作の変化

    次にロシアの情報工作について述べたいと思います。
    ロシアや中国などグローバルサウスは情報工作については非常に優れていると思います。
    日本国内でもそれと繋がっているまでは言いませんが、それに乗っかったり、利用したりする勢力があるのはと思い下記にまとめてみました。

    Grokが生成した画像

    かつては、ウクライナ国内におけるジェノサイドを印象付ける動画を大量に発信し、ロシアによる侵攻の正当性を主張する傾向が強かった。しかし、それらが捏造された偽情報であるという噂が広まるにつれ、次第に効果が得られなくなってきた。

    それに代わって台頭してきたのが、閉鎖的なグループ(遮断型グループ)の構築を通じた、親ロシア思想の浸透を狙う工作である。こうしたクローズドな環境において、もともとロシアへの関心が薄い参加者を誘導し、地下資源の豊富なロシアと関係を持つメリットを強調し、ロシア擁護を拡散していくやり方だ。
    主に参政党の支持者層を中心に展開されているこの活動は、反論を封殺することでロシア支持者を増やし、同時に参政党の支持層拡大も図るというものである。
    一見すると緩やかながらも、自由な議論が封じられているため反論が極めて難しく、非常に厄介な手法だといえるのではないだろうか。


  • ドンバスにおける人権状況

    https://www.helsinki.org.ua/wp-content/uploads/2017/04/booklet_ENG1.pdf
    ヒューマンライツウォッチの報告書のGrokによる日本語訳

    キーウ、2017年この出版物は、ウクライナ・ヘルシンキ人権連合(UHHRU)の制度的開発プロジェクトの枠組みの中で、在ウクライナ・スウェーデン大使館の財政的支援を受けて作成されたものです。本出版物で示された意見、結論、勧告は、必ずしも在ウクライナ・スウェーデン大使館またはスウェーデン政府の見解を反映するものではありません。内容は著者およびUHHRUの責任です。ウクライナ・ヘルシンキ人権連合
    ウクライナ、キーウ、フロリフスカ通り3/34、04070
    電話/ファックス:+380 44 485 17 92、office@helsinki.org.ua、www.helsinki.org.ua
    郵便物用:04071、キーウ、私書箱100


    ドンバスにおける人権状況2017年2月1日時点で、ドンバスでの戦争により9,800人以上が死亡し、そのうち約2,300人が民間人です。さらに23,455人が負傷しています(国連の数字による)。ドンバス住民のうち160万人が国内避難民となっています。戦争による損害は推定150億米ドルに達しています。広範な砲撃が最も甚大な破壊を引き起こし、ドネツク州だけでも集合住宅4,233棟、個人住宅17,803軒、社会施設1,676施設が損傷または破壊されました。広範な誘拐も深刻な人権問題です。最新の入手可能な数字によると、「LPR」と「DPR」は紛争開始以来約3,200人を誘拐しました。組織的な交換により3,083人が解放されましたが、117人が依然として捕虜のままです。ウクライナ側では、2015年3月中旬時点でSBUが交換により1,553人の分離主義者を解放しています。分離主義者側およびウクライナの義勇大隊・法執行機関の双方に拘束された人々が、深刻な人権侵害を受けました。ルハーンシクのSBUビル(分離主義者に占拠)から解放された民間人が、拷問の痕跡を示しています。拷問や虐待を受けた後、捕虜から解放された人々は適切な救済を受けるのに苦労しています。UHHRUの報告によると、「LPR」/「DPR」から解放されたウクライナ軍兵士のうち、資格のある心理的支援を受けたのは15人に1人に過ぎません。砲撃と誘拐に加え、民間人が直面するもう一つの危険は、地雷と爆発物の広範な使用です。NGO連合「ドンバスにおける正義のための平和」が発行した報告書「地獄を生き抜く」によると、「LPR」と「DPR」に捕らえられた民間人の71%、軍人の68%が拷問を受けました。インタビューを受けた人々は、殴打や模擬処刑の広範な慣行を報告しました。民間人はしばしば身代金を得るため、または財産を奪うために誘拐されました。2015年5月、アムネスティ・インターナショナルは、ウクライナの義勇大隊による「分離主義」を疑われた民間人に対する拷問や虐待などの侵害に注目した報告書を発表しました。別の報告書「あなたは存在しない」は、ウクライナ保安庁(SBU)による秘密収容施設の使用に光を当てました。

    「戦闘員が前線から怒りながら戻ってくると、囚人を殴りました。彼らは『膝を撃つ、静脈を切る、頭を吹き飛ばす』と言っていました。同時に、すでに答えた有名な質問を私たちに尋ねていました。」
    G-188、分離主義者に捕らえられた軍人。UHHRUによるインタビュー

    ウクライナ国防省によると、紛争勃発以来、1,205人(うち403人が民間人)が地雷により死亡または負傷しました。地雷は、ミンスク合意後の「陣地戦」の段階で大部分が設置された、ウクライナ軍と分離主義者の陣地間の30km緩衝地帯で最大の危険を及ぼしています。自称共和国に対するロシアの実効的支配の証拠紛争の当初から、「LPR」と「DPR」に対するロシアの実効的支配の証拠があります。入手可能な証拠は、ロシアが武器供給、経済支援、政治的調整を担当し、ロシア軍が直接紛争に参加したことを示唆しています。これらの事実は、ロシア連邦が紛争中に発生した人権侵害に責任を負うという結論につながります。ウクライナ・ヘルシンキ人権連合は、捕虜から解放された軍人および民間人から200件以上のインタビューを収集し、紛争へのロシアの関与の直接的証拠を見たとの報告を受けました。そのような証拠には以下が含まれますが、これらに限定されません:

    • 分離主義者がロシアでのみ生産された武器を所持していること
    • 自らロシア軍人であると公言した軍事要員の存在
    • 弾薬のロシア製マーク

    武器の供給分離主義者は武器のほとんどを地元の軍事部隊から押収したと主張していますが、国際的な観測者は、ロシアでのみ製造され、ウクライナに輸入されたことのない兵器・装備をドンバスで特定しています。早くも2014年5月に、OSCE特別監視団はルハーンシクで「ロシア式PKM機関銃とAK-74M」を携行する制服姿の男たちを観測しました。紛争全体を通じて、国際ボランティアグループ「InformNapalm」は、オープンソース資料とソーシャルメディアの写真を用いて、ドンバスで30種類以上のロシア製兵器・装備を特定しました。特定された武器の大部分は2005年から2014年の間に生産されたものです。ロシアが分離主義者に提供する別の支援形態は、「人道援助」を装った軍事補給です。2014〜2015年にロシアは46の「人道支援車列」を送り、それぞれ100台以上の車両で構成されていました。これらは国境管理や赤十字国際委員会の検査を経ずにウクライナに入りました。観測者はしばしばこれらの車列に武器や軍事物資が含まれる可能性を指摘しましたが、これまでのところ確固たる証拠はありませんでした。UHHRUは、ドネツクで拘留中に「人道支援車列」のトラックを降ろすことを強要された軍人にインタビューし、貨物に弾薬やその他の軍事物資が含まれていたと報告しました。ウクライナに供給されたことのない装甲兵員輸送車BTR-82AMがドンバスで確認されました。越境砲撃紛争開始以来、ロシアは国境を越えた砲撃で「LPR」と「DPR」を支援してきました。これにより分離主義者はロシアとの国境を掌握することができました。Bellingcat調査チームは、2014年7月14日から8月8日の間にロシアからの攻撃の証拠を発見しました。ロストフ州グコヴォ町からのウクライナ領土への砲撃は動画映像で確認されています。さらに、Bellingcatは2014年8月23〜27日のノヴォアゾフスク攻勢中の砲撃がロシア領土から行われた証拠を発見しました。大西洋評議会の調査報告書も、衛星データ、クレーター分析、オープンソース資料の組み合わせに基づき、複数の越境砲撃の事例を特定しています。ロシア軍の直接参加

    「…私たちは縦隊から10人のロシア人を捕らえました。これらの兵士はロシア連邦軍の第331旅団または師団の所属だと述べました。はい、それは第331プスコフ空挺師団でした。全員が軍事IDを示し、正規のロシア軍であることを確認しました。全員が契約兵で、徴集兵はいませんでした。将校も含まれており、捕虜にした直後にATO本部に送られました。」
    F-201、UHHRUによるインタビューを受けた軍人

    制服や車両に記章がなかった理由について説明は提供されていません。サイモン・オストロフスキーの報告書「セルフィー兵士:ロシアがウクライナにチェックイン」では、ジャーナリストがウランウデ出身のブリヤート人ロシア兵士バト・ダンバイエフの動きを、ソーシャルメディアのアカウント情報を用いて追跡しました。ダンバイエフはロシアのタガンログで兵役を終えた後、ウクライナのヴフレヒルシクに向かい、記章のない軍服を着て軍事作戦に参加しました。報告書はまた、地元住民がヴフレヒルシクでのロシアの存在を確認していることや、ウクライナ国境近くの大規模なロシア軍事基地も示しています。この分野の主要な学者も、ドンバスにおけるロシア軍の存在とその規模を確認しています。ロジャー・マクダーモットは、東部ウクライナに9,000〜12,000人のロシア軍が存在したと指摘しています。ポール・ロビンソンは、2014年8月時点で1,000〜3,000人のロシア軍がウクライナにいたと示唆しています。2014年8月、ドネツク州でウクライナ軍が10人のロシア空挺兵を捕らえ、その後SBUに引き渡しました。ロシア連邦は公式に空挺兵が迷ったと主張しましたが、制服や車両に記章がなかった理由の説明は提供されていません。目撃者からの証拠に加え、もう一つの状況証拠はロシアでの身元不明の軍人の集団埋葬です。2014年8月25日、ウクライナの通信社「ウクライナ・プラウダ」は、公式に「不明な状況下で死亡した」とされたプスコフ空挺兵がロシアで埋葬されたと報じました。ロストフでは4,000人以上の無名の人々の集団埋葬が報告されました。ドンバスで戦った3人のロシア軍人がコストロマで埋葬されたとも報じられています。ソーシャルネットワークのデータを用いて、UHHRUは人権侵害の責任があるとされる「LPR」および「DPR」の戦闘員1,339人を特定しました。サンプルはランダムではありませんが、少なくとも11%(国籍が判明している全戦闘員の17%)がロシア市民であるようです。「LPR」および「DPR」への経済・財政支援自称共和国はロシアからの経済支援に大きく依存しています。第一に、ロシア・ルーブルがドンバスの主な流通通貨であり、自称共和国の指導部は公式にこの通貨を認めています。第二に、分離主義者支配地域で販売される商品の大部分はロシア産です。「ドネツク通信社」(分離主義者の報道機関)によると、「DPR」の店舗で販売される商品の最大80%がロシアから輸入されています。さらに、分離主義者はロシアからのエネルギーと資源の供給に依存しています。2015年2月、「ナフトガス・ウクライナ」がドンバスへのガスパイプラインのバルブを閉じた後、ガスプロムはロストフ州とウクライナ領土の国境にあるガス計量ステーション経由で「DPR」および「LPR」支配地域に燃料を供給し始めました。2015年1月1日から4月21日の間に、ガスプロムはドンバスに5億5,500万立方メートルのガス(価値1億7,420万ドル)を供給しました。「LPR」の唯一の電力源であるロシアからのペレモハ=シャフティ高電圧500kV線は1950年代に建設され、戦争前はほとんど使用されていませんでした。「RBC-ウクライナ」によると、2015年6月時点で「LPR」はこの線を通じて毎日600MWの電力を受け取っていました。分離主義者とロシアの経済的つながりを確認するもう一つの証拠は、ドンバスの都市からロシア領土に移転した工場です。例として、ルハーンシク・パルホメンコ機械工場、機械工場-100、国営企業「ドネツク中央機械工学設計局」、「ホライゾン」鉱山救助装備工場、ルハーンシクテプロヴォズ、POLY-PAK、ルハーンシク・マーシャル電気工学工場、「ユノスト」宇宙防衛製造工場、ルハーンシク航空機修理工場などが挙げられます。ロシア当局はウクライナ機器の違法輸入を阻止するのではなく、受け取り、「輸入代替プログラム」の一環としてロシア経済に統合しています。「LPR」および「DPR」への政治的支援自称共和国の複数の指導者が、ロシアの法執行機関と強いつながりを持つロシア市民です。最も注目すべき例は以下の通りです:

    1. イゴール・ストレロフ(ギルキン):元「DPR」国防相でロシア市民。2013年3月31日までロシア連邦保安庁(FSB)の大佐だったことをプラウダ通信に自ら確認しています。
    2. オレクサンドル・ボロダイ:元「DPR」首相で、ロシアFSBとのつながりを持つロシア市民。
    3. マラト・バシロフ:元「LPR」閣僚会議議長で、ロシア市民かつロシアの政治アナリスト。
    4. ヴァレリー・ボロトフ:元「LPR」首長で、ロシア軍の一員としてジョージアとナゴルノ・カラバフでの軍事行動に参加したロシア市民。
    5. イゴール・ベズラー:「DPR」「軍」の少将。ウクライナ保安庁が公表した情報によると、ロシア連邦軍参謀本部情報総局の複数の部隊で勤務し、中佐として退役しました。

    ロシア連邦はまた、ウクライナ軍人を公に訴追することで自称共和国を支援しています。ロシア連邦捜査委員会は、ウクライナ領土上でドネツクおよびルハーンシク州の住民に対してウクライナ軍が犯したとされる犯罪の捜査を実施しました。ICRFのウェブサイトに掲載された情報によると、13万人以上が証人として尋問され、2万人以上が被害者と認定されました。「LPR」および「DPR」に対するロシアの影響力を確認するもう一つの証拠は、最近漏洩したウラジスラフ・スルコフの受付メールボックスからのメールです。プーチン大統領補佐官のスルコフは、クレムリンで「LPR」および「DPR」の監督を担当する人物と噂されており、漏洩は概ねこの仮説を裏付けています。メールボックスには、「DPR」部隊の死傷者に関する通信(ロシア軍人1人の死亡情報を含む)、その後ドンバス住民の声明として発表されたテキストの修正などが含まれています。ウクライナ・ヘルシンキ人権連合の活動:

    • 被害者および目撃者の直接の証言に基づき人権侵害を記録する
    • 紛争双方の戦闘員による人権侵害のデータベースを定期的に更新する
    • 欧州人権裁判所(ECHR)への申請を支援し、国際刑事裁判所(ICC)に証拠を提供する
    • ウクライナにおける移行期正義の実施に関する予備調査を実施する
    • 捕虜交換および人質解放のモデルを開発する

    国際社会ができること:

    • 国際的な調査・監視プロジェクト内での国連の存在を拡大する
    • 捕虜交換の法的メカニズム開発、民間目標への砲撃事例の記録、被害者への救済を目的とした国際作業部会の創設を促進する
    • ウクライナ専門家の能力向上のための教育プログラムを組織する
    • マスメディア監視 など

    (注:PDFのレイアウトにより一部テキストが断片的でしたが、主要な内容を再構築して翻訳しました。脚注や写真キャプションの詳細は省略または簡略化しています。完全な原文はリンク先のPDFをご参照ください。)

    11 ウェブページ

  • 地球が球体であることを証明する

    フラットアース説(地球平面説)の仕組みと主な考え方

    フラットアース説は、地球は球体ではなく平らな円盤状であると主張する世界観です。その具体的な仕組みや主な主張は、大きく分けて4つの要素で構成されています。

    【SNSで注目を集める地球平面説】支持者が主張する根拠とは?パンケーキ型の地球が元気に飛び回る世界

    1. 地球の形状と構造

    地球はレコード盤や皿のような円盤状であるとされています。円盤の中心には北極があり、私たちの住む大陸はその周囲に広がっています。さらに、円盤の最も外側の縁(フチ)には、海の水が宇宙へ流れ落ちるのをせき止めるため、高さ数十メートルとも言われる巨大な「氷の壁(南極)」が存在すると説明されています。

    2. 宇宙や天体の仕組み

    地球の上空には、星や太陽、月が組み込まれた、あるいはその内部を移動するドーム状の「天蓋(てんがい)」が覆っていると主張されます。太陽や月は、何百万キロも離れた宇宙空間にあるのではなく、地球のすぐ上空(数千キロメートル程度)をスポットライトのように小さく移動し、昼夜や季節の変化を作り出しているとされています。

    3. 物理現象の解釈

    ニュートン物理学で言う「重力」の存在は基本的に否定されます。代わりに、円盤状の地球自体が絶えず上方向へ加速し続けているため、その加速度によって物が地面に押し付けられているという説や、単に「密度」や「浮力」の違いによって物が上下に分かれているだけであるという説が唱えられます。また、肉眼で見える地平線や水平線が常にまっすぐ平らに見えることも、地球が平面である証拠だと主張されます。

    4. なぜ「地球は丸い」とされているのか(陰謀論の背景)

    私たちが学校やメディアで「地球は球体だ」と教えられていることに対しては、NASAをはじめとする世界の宇宙機関や権力が隠蔽を行っていると主張します。アポロ計画などの月面着陸や、宇宙から見た「青い地球」の映像はすべてCGやセットによるフェイクであるとされ、「権威の言うことを疑い、自分の五感(見た目の平面)を信じるべきだ」という反権威主義的な思想が根底にあります。

    フラットアース説に反論する

    1.水平線に消える船

    海岸から遠ざかる船を観察すると、地球の曲率により船体から順に水平線の下へ消えていきます。もし地球が平らなら、船は全体が縮小するだけのはずです。大気屈折によって一時的に浮いて見える例外はあっても、さらに遠ざかればやはり下から順に見えなくなります。

    2.場所によって見える星が異なる

    異なる半球では見える星座が異なります。例えば、北斗七星はオーストラリアの大部分で見えず、南十字星はアメリカの大部分で見えません。もし地球が平らなら、世界中どこからでも同じ星座が見えるはずです。この違いが生じるのは、地球が球体であり、その曲面が一部の星座を視界から隠してしまうからです。

    ここまで 地球の本当の形とは?地球が丸いことを証明する7つの方法 から

    3.昼と夜があること

    地球が西から東へ自転するため、私たちは毎日、太陽が東から昇り(日の出)西へ沈む(日没)のを目にします。地球平面説の支持者は、太陽が平らな上空を「スポットライト」のように周回すると主張します。しかし、これでは太陽が水平線の下に沈むことや、その見かけの大きさが変わらない現実と矛盾します。毎日繰り返される日の出や日没、昼夜の仕組みは、地球が球体であり自転している事実でしか正しく説明できません。

    地球平面説 – Wikipedia

    4.季節があること

    球体モデルでは、地軸の23.5度の傾きによって太陽光が当たる角度や量が変わり、季節が生まれると説明されます。一方、フラットアースモデルでは、平面上を移動する太陽の軌道の直径が変化することで季節を説明しようとします。しかし、このモデルには南半球での見え方に矛盾が生じるほか、「夏と冬で太陽の距離が変わるなら、地球から見える太陽の大きさ(視直径)も大きく変わるはずだ」という予測が立ちます。
    実際に夏至と冬至の太陽の大きさを測定・比較すると、大きさに変化は見られず、フラットアースモデルの予測が誤りであることが証明されています。

    5.世界一周できる

    地球が平面でなく球体なので、ピースボート等同じ方向に進めば、一周して同じ場所に戻ってきます。
    地球平面説の一部は、北極を真ん中にした円盤説を唱える説もあります。
    その説では南半球が円盤の外側にあるため、巨大化してるはずです。が、実際にはオーストラリアから南アメリカ、同じくオーストラリアから南アフリカには普通に飛行便があり、北半球以上に時間がかかることはないです。

    世界一周すると時差で日が一日ずれる現象も平面説では検証できないです。

    その他

    月食時の影の形
    月食の際、月に映る地球の影は常に円形です。あらゆる角度から見ても丸い影を作るのは球体だけです。

    他の惑星の形状
    他の星がすべて球体なのに地球だけ平面なのはありえないです

    平面だったら遠くの都市が見えるはず
    平面で雲がなければ、望遠鏡を使ってアメリカや朝鮮半島など海の向こうの都市が見えるはずです。それが見えないのは、地球が球体で遠方は水平線に隠れて見えないからです。

  • 日帰り源泉掛け流しの温泉サイト要件定義

    以下のログインを用意
    ・メールアドレス、パスワード

    PC、スマフォどちらでも見やすい画面にする

    管理者は管理者と一般ユーザー(以下ログインユーザー)の2種類を設定でき、ログインユーザーの権限およびユーザー管理などの閲覧および操作権限を持つ
    管理画面を閲覧できる
    ログイン時、ログイン画面のURLを指定すればログイン画面が表示され、正しいログインユーザー名(登録メールアドレス)及びパスワードを指定して、登録と一致すればログインできる
    ログインユーザーの一覧を閲覧でき、全ユーザーの新規登録、編集、削除、パスワードの変更操作ができる
    ログインユーザーは自身のパスワードを変更できる
    “初期ページはトップ(お知らせ、このサイトついて)、都道府県別リンク、温泉地別リンク
    “
    SEO対策を行い、Google検索されるようにする
    画面構成として、都道府県別に日帰り温泉の情報をフレックス形式で横並びに配置し(モバイルは縦位置表示)、各要素は外観写真、温泉名、温泉地名、循環の有無、源泉かけ流しの有無、加水の有無、消毒の有無、日帰り温泉の正式ホームページへのリンクの項目とし、温泉名をクリックすることで該当する温泉の個別詳細画面へ遷移する仕様とします。
    “画面構成としては、北から順に温泉地別でグループ分けを行い、縦一に表示します。初期状態では温泉地名のみが表示され、クリックすることで日帰り温泉のリストが展開されるアコーディオン形式とします。
    日帰り温泉の情報は縦方向に配置し、個々の温泉要素はフレックスボックスを用いて横並びで表示する(モバイルの場合、縦位置)。個別の温泉要素の表示内容はNo.11と共通とします。”
    No.10,11リンクの詳細画面は各日帰り温泉データは、郵便番号、住所、電話番号、温泉地ID、説明文、データ確認日、営業有無、外観写真、循環の有無、源泉かけ流しの有無、加水の有無、消毒の有無、成分、日帰り温泉の正式ホームページへのリンクの項目を保有するものとする。尚、説明文には写真やリンクを文章の中で表示できるようにする。
    管理者ユーザーが訪問記を各温泉の詳細データに本文を投稿できるようにする。尚、本文には写真やリンクを文章の中で表示できるようにする。
    閲覧ユーザーが各温泉の詳細データにコメント(本文のみ)できるようにする。※ランダムワードの入力を必須とするマルチポスト対策要。また、投稿があれば管理者にメールが届くようにする。
    検索機能の実装。温泉地名、温泉名、住所で曖昧。循環の有無、源泉かけ流しの有無、加水の有無、消毒の有無で検索できるようにする。
    すべてのページ最下部(フッター)にホームページ名(源泉掛け流しの日帰り温泉)、URLが表示される
    管理者による各種コンテンツ(ユーザー、お知らせ、日帰り温泉、温泉地、訪問記)のCRUD機能および、コメントの削除機能を実装する
    閲覧数次第で収益化(広告表示)も検討する
    初期データはエクセルからアップロードできるようにする
    環境は、フロントはNextJS(Vercel)バックエンドはLaravel(Xserver)で、クッキーを使用して認証を行うもとする。

  • NextJS Laravel 環境構築

    昨日 14:56
    バックエンド laravel フロントエンドNextJS クッキーを使って認証 まずはLaravel11 sctumuで認証構築 Postmanで確認したい
    ChatGPT

    はい。
    Laravel 11をバックエンド、Next.jsをフロントエンドにして、Sanctumの「Cookie + Session」方式で認証する構成で進めるのがよいです。

    まずは Next.jsはまだ触らず、Laravel 11 + Sanctumを構築してPostmanで完全に確認しましょう。

    Laravel公式でも、Next.jsのようなSPAにはSanctumのSPA認証を使い、APIトークンではなくLaravelのセッションCookieを使う方式が推奨されています。

    今回の構成はこうします。

    Next.js
    │
    │ Cookie
    ▼
    Laravel 11
    │
    ├─ Sanctum
    ├─ Session
    ├─ CSRF
    └─ MySQL

    最終的には、

    POST /sanctum/csrf-cookie
    ↓
    POST /api/login
    ↓
    LaravelがセッションCookie発行
    ↓
    GET /api/user
    ↓
    ログインユーザー取得

    という流れになります。

    1. Laravel 11プロジェクト

    まだ作っていない場合、

    composer create-project laravel/laravel laravel-backend “^11.0”

    cd laravel-backend

    Laravel 11ではSanctumを

    php artisan install:api

    で導入できます。公式ドキュメントでもこの方法が案内されています。

    実行します。

    php artisan install:api

    途中で質問が出たら、基本的にはデフォルトで進めてください。

    その後、

    php artisan migrate

    1. データベース設定

    .env

    例えばMySQLなら、

    APP_NAME=Laravel
    APP_ENV=local
    APP_KEY=
    APP_DEBUG=true
    APP_URL=http://localhost:8000

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=next_laravel
    DB_USERNAME=root
    DB_PASSWORD=

    データベースを作成します。

    CREATE DATABASE next_laravel;

    そして、

    php artisan migrate

    1. Userモデル確認

    app/Models/User.php

    Laravel 11 + Sanctumなら、最終的にはこのような形にしておけばOKです。

    <?php

    namespace App\Models;

    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Illuminate\Notifications\Notifiable;
    use Laravel\Sanctum\HasApiTokens;

    class User extends Authenticatable
    {
    use HasApiTokens, HasFactory, Notifiable;

    protected $fillable = [
        'name',
        'email',
        'password',
    ];
    
    
    protected $hidden = [
        'password',
        'remember_token',
    ];
    
    
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }

    }

    ただし、今回のCookie認証ではSanctumのAPIトークンを発行するわけではありません。

    ここは重要です。

    ❌ localStorageにSanctum tokenを保存

    ❌ Authorization: Bearer xxx

    ⭕ Laravel Session Cookie
    ⭕ XSRF-TOKEN

    SanctumのSPA認証はCookieベースのセッション認証です。

    1. Sanctumのstateful設定

    Laravel 11ではここが非常に重要です。

    bootstrap/app.php

    確認してください。

    <?php

    use Illuminate\Foundation\Application;
    use Illuminate\Foundation\Configuration\Exceptions;
    use Illuminate\Foundation\Configuration\Middleware;

    return Application::configure(basePath: dirname(DIR))
    ->withRouting(
    web: DIR.’/../routes/web.php’,
    api: DIR.’/../routes/api.php’,
    commands: DIR.’/../routes/console.php’,
    health: ‘/up’,
    )
    ->withMiddleware(function (Middleware $middleware) {

        $middleware->statefulApi();
    
    
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

    特に、

    $middleware->statefulApi();

    が重要です。

    Laravel公式でも、SPAからのCookie認証を有効にするために statefulApi() を使用するよう説明されています。

    1. Sanctumのstateful domains

    .envに、

    SANCTUM_STATEFUL_DOMAINS=localhost:3000,127.0.0.1:3000

    を設定します。

    ただし、今回Postmanから確認する段階ではlocalhost:8000からアクセスするので、まずはPostman確認を優先した設定にしても構いません。

    最終的にNext.jsを

    http://localhost:3000

    Laravelを

    http://localhost:8000

    で動かすなら、

    SANCTUM_STATEFUL_DOMAINS=localhost:3000,127.0.0.1:3000

    としておきます。

    ポート番号まで含める必要があります。

    1. CORS設定

    Laravel 11では config/cors.php が最初から存在しない場合があります。

    その場合、

    php artisan config:publish cors

    を実行します。

    Laravel公式もSPAでCORSをカスタマイズする場合、このコマンドを使用するよう案内しています。

    config/cors.php

    <?php

    return [

    'paths' => [
        'api/*',
        'sanctum/csrf-cookie',
    ],
    
    
    'allowed_methods' => ['*'],
    
    
    'allowed_origins' => [
        'http://localhost:3000',
    ],
    
    
    'allowed_origins_patterns' => [],
    
    
    'allowed_headers' => ['*'],
    
    
    'exposed_headers' => [],
    
    
    'max_age' => 0,
    
    
    'supports_credentials' => true,

    ];

    特に、

    ‘supports_credentials’ => true,

    が重要です。

    1. Session設定

    .env

    SESSION_DRIVER=file
    SESSION_LIFETIME=120
    SESSION_DOMAIN=null
    SESSION_SECURE_COOKIE=false
    SESSION_SAME_SITE=lax

    ローカル環境ではこれで始めましょう。

    まだ

    SESSION_DOMAIN=.example.com

    などにはしません。

    1. Login APIを作る

    今回はLaravel側にシンプルなAPIを作ります。

    まずController。

    php artisan make:controller AuthController

    app/Http/Controllers/AuthController.php

    <?php

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Validation\ValidationException;

    class AuthController extends Controller
    {
    public function login(Request $request)
    {
    $credentials = $request->validate([
    ‘email’ => [‘required’, ‘email’],
    ‘password’ => [‘required’],
    ]);

        if (!Auth::attempt($credentials)) {
            throw ValidationException::withMessages([
                'email' => ['メールアドレスまたはパスワードが正しくありません。'],
            ]);
        }
    
    
        $request->session()->regenerate();
    
    
        return response()->json([
            'message' => 'ログインしました',
            'user' => $request->user(),
        ]);
    }
    
    
    public function user(Request $request)
    {
        return response()->json(
            $request->user()
        );
    1. APIルート

    routes/api.php

    <?php

    use App\Http\Controllers\AuthController;
    use Illuminate\Support\Facades\Route;

    Route::post(‘/login’, [AuthController::class, ‘login’]);

    Route::middleware(‘auth:sanctum’)->group(function () {

    Route::get('/user', [AuthController::class, 'user']);
    
    
    Route::post('/logout', [AuthController::class, 'logout']);

    });

    これで、

    POST /api/login
    GET /api/user
    POST /api/logout

    ができます。

    1. テストユーザーを作る

    まず、

    php artisan tinker

    そして、

    \App\Models\User::create([
    ‘name’ => ‘Test User’,
    ‘email’ => ‘test@example.com’,
    ‘password’ => ‘password123’,
    ]);

    終了。

    exit

    1. Laravel起動
      php artisan serve

    通常、

    http://127.0.0.1:8000

    または

    http://localhost:8000

    になります。

    1. ここからPostman

    ここが今回の重要部分です。

    Step 1 CSRF Cookie取得

    Postmanで、

    GET
    http://localhost:8000/sanctum/csrf-cookie

    を実行。

    Bodyはありません。

    Headerに、

    Accept: application/json

    を入れておきます。

    成功するとレスポンスはほぼ空ですが、Cookiesを見ると

    XSRF-TOKEN
    laravel_session

    が設定されます。

    Laravel公式でも、SPA認証では最初に /sanctum/csrf-cookie を呼び、XSRF-TOKEN Cookieを取得してからログインする流れになっています。

    1. PostmanでCookieを確認

    PostmanのURL欄付近にある

    Cookies

    をクリックしてください。

    例えば、

    localhost

    に、

    XSRF-TOKEN
    laravel_session

    が存在することを確認します。

    ここまで来ればかなり重要なところまで成功しています。

    1. Login

    次に、

    POST
    http://localhost:8000/api/login

    Header:

    Accept: application/json
    Content-Type: application/json
    origin:http://localhost:3000

    Body → raw → JSON

    {
    “email”: “test@example.com”,
    “password”: “password123”
    }

    ただし、ここで一つ注意があります。

    CSRF対策のため、X-XSRF-TOKENも送る必要があります。

    Postmanでは、取得した XSRF-TOKEN Cookieの値をURLデコードして、

    X-XSRF-TOKEN

    Headerに設定します。

    例えば、

    X-XSRF-TOKEN:

    です。

    ブラウザ+Axiosの場合はAxiosが自動的にこの処理を行えますが、Postmanでは自分で確認する必要があります。Laravel公式もこの仕組みを説明しています。

    1. Login成功

    成功すれば、

    {
    “message”: “ログインしました”,
    “user”: {
    “id”: 1,
    “name”: “Test User”,
    “email”: “test@example.com”
    }
    }

    のようになります。

    さらにPostmanのCookieを見ると、

    laravel_session

    が更新されているはずです。

    この laravel_session が今回の認証の本体です。

    1. 認証確認

    次に、

    GET
    http://localhost:8000/api/user

    Header:

    Accept: application/json

    Cookieは先ほどの

    laravel_session

    を使います。

    成功すれば、

    {
    “id”: 1,
    “name”: “Test User”,
    “email”: “test@example.com”,
    …
    }

    が返ります。

    これが、

    「CookieによるLaravel Sanctum認証が成功した」

    という確認になります。

    Laravel公式の保護されたAPIも、auth:sanctum を付けた /user に対して $request->user() を返す形になっています。

    1. Logout

    最後に、

    POST
    http://localhost:8000/api/logout

    を実行。

    成功:

    {
    “message”: “ログアウトしました”
    }

    その後もう一度、

    GET
    http://localhost:8000/api/user

    すると、

    401 Unauthorized

    になることを確認します。

    今回の確認ポイント

    Postmanでは、この順番でテストしてください。

    ① GET
    /sanctum/csrf-cookie
    ↓
    XSRF-TOKEN
    laravel_session
    ↓

    ② POST
    /api/login
    ↓
    Cookieによるログイン
    ↓

    ③ GET
    /api/user
    ↓
    ユーザー情報取得
    ↓

    ④ POST
    /api/logout
    ↓

    ⑤ GET
    /api/user
    ↓
    401 Unauthorized

    ここまで成功したら、Laravel側のCookie認証は完成です。

    次の段階

    推奨構成

    Next.js側をこのようにします。

    src/
    ├── app/
    │ ├── login/
    │ │ └── page.tsx
    │ ├── management/
    │ │ └── page.tsx
    │ ├── layout.tsx
    │ └── providers.tsx
    │
    ├── lib/
    │ └── axios.ts
    │
    ├── types/
    │ └── User.ts
    │
    ├── api/
    │ └── AuthAPI.ts
    │
    ├── queries/
    │ └── AuthQuery.ts
    │
    └── hooks/
    └── AuthContext.tsx

    役割は、

    AuthAPI.ts
    ↓
    Laravel APIとの通信

    AuthQuery.ts
    ↓
    useUser
    useLogin
    useLogout

    AuthContext.tsx
    ↓
    必要なら認証状態を提供

    TanStack Query
    ↓
    ユーザー情報をキャッシュ

    です。

    1. TanStack Queryをインストール

    Next.jsプロジェクトで、

    npm install @tanstack/react-query axios

    を実行します。

    以前の

    import { useQuery } from “react-query”

    ではなく、現在は

    import { useQuery } from “@tanstack/react-query”

    を使います。

    1. User型

    src/types/User.ts

    export type User = {
    id: number
    name: string
    email: string
    email_verified_at: string | null
    created_at: string
    updated_at: string
    }
    3. Axios

    ここがCookie認証では重要です。

    src/lib/axios.ts

    import axios from “axios”

    const api = axios.create({
    baseURL: process.env.NEXT_PUBLIC_API_URL,
    withCredentials: true,
    withXSRFToken: true,
    headers: {
    Accept: “application/json”,
    },
    })

    export default api

    .env.local

    NEXT_PUBLIC_API_URL=http://localhost:8000

    これで、

    api.get(“/api/user”)

    と書けば、

    http://localhost:8000/api/user

    にアクセスできます。

    1. AuthAPI

    元々のコードをかなりそのまま使えます。

    ただし、Sanctumの場合はログイン前にCSRF Cookieを取得する必要があります。

    src/api/AuthAPI.ts

    import api from “@/lib/axios”
    import { User } from “@/types/User”

    type LoginParams = {
    email: string
    password: string
    }

    export const getCsrfCookie = async () => {
    await api.get(“/sanctum/csrf-cookie”)
    }

    export const getUser = async (): Promise => {
    const { data } = await api.get(“/api/user”)

    return data
    }

    export const login = async ({
    email,
    password,
    }: LoginParams): Promise => {

    await getCsrfCookie()

    const { data } = await api.post<{
    message: string
    user: User
    }>(“/api/login”, {
    email,
    password,
    })

    return data.user
    }

    export const logout = async () => {
    const { data } = await api.post(“/api/logout”)

    return data
    }

    ここが非常に重要です。

    await getCsrfCookie()

    ↓

    api.post(“/api/login”)

    という順番です。

    1. QueryClient

    Next.js App Routerなので、Providerを作ります。

    src/app/providers.tsx

    “use client”

    import {
    QueryClient,
    QueryClientProvider,
    } from “@tanstack/react-query”

    import { useState } from “react”

    export default function Providers({
    children,
    }: {
    children: React.ReactNode
    }) {

    const [queryClient] = useState(
    () =>
    new QueryClient({
    defaultOptions: {
    queries: {
    retry: false,
    refetchOnWindowFocus: false,
    },
    },
    })
    )

    return (

    {children}

    )
    }
    6. layout.tsx

    src/app/layout.tsx

    import Providers from “./providers”

    export default function RootLayout({
    children,
    }: Readonly<{
    children: React.ReactNode
    }>) {

    return (



    {children}



    )
    }

    これでアプリ全体からTanStack Queryが使えます。

    1. AuthQuery

    ここが、以前のReact Query版の中心部分に相当します。

    src/queries/AuthQuery.ts

    “use client”

    import {
    useMutation,
    useQuery,
    useQueryClient,
    } from “@tanstack/react-query”

    import {
    getUser,
    login,
    logout,
    } from “@/api/AuthAPI”

    type LoginParams = {
    email: string
    password: string
    }

    まずUser。

    export const useUser = () => {

    return useQuery({
    queryKey: [“user”],
    queryFn: getUser,

    retry: false,
    
    staleTime: 5 * 60 * 1000,
    

    })
    }

    これだけで、

    const { data: user, isLoading, isError } = useUser()

    とできます。

    1. Login
      export const useLogin = () => {

    const queryClient = useQueryClient()

    return useMutation({
    mutationFn: (params: LoginParams) =>
    login(params),

    onSuccess: (user) => {
    
      queryClient.setQueryData(
        ["user"],
        user
      )
    },
    

    })
    }

    これなら、

    Login成功
    ↓
    user情報
    ↓
    [“user”] Queryに保存

    となります。

    1. Logout
      export const useLogout = () => {

    const queryClient = useQueryClient()

    return useMutation({

    mutationFn: logout,
    
    onSuccess: () => {
    
      queryClient.removeQueries({
        queryKey: ["user"],
      })
    
    },

    })
    }

    これで、

    Logout
    ↓
    Laravel Session破棄
    ↓
    [“user”]削除
    ↓
    未ログイン状態

    になります。

    1. AuthContextは必須ではありません

    ここは以前のReact版と少し考え方を変えた方がいいです。

    以前は、

    const [isAuth, setIsAuth] = useState(false)

    としていました。

    しかしCookie認証 + TanStack Queryなら、

    isAuth

    を別途stateとして管理する必要がありません。

    例えば、

    const { data: user } = useUser()

    で、

    user !== undefined

    ならログイン、

    user === undefined

    なら未ログイン、

    と判断できます。

    より正確には、

    const {
    data: user,
    isLoading,
    isError,
    } = useUser()

    として、

    isLoading
    ↓
    認証確認中

    user
    ↓
    ログイン

    isError
    ↓
    未ログイン

    とします。

    1. それでもAuthContextを使いたい場合

    もちろんできます。

    例えば、

    src/hooks/AuthContext.tsx

    “use client”

    import {
    createContext,
    useContext,
    ReactNode,
    } from “react”

    import { useUser } from “@/queries/AuthQuery”

    type AuthContextType = {
    user: ReturnType[“data”]
    isLoading: boolean
    isAuthenticated: boolean
    }

    const AuthContext =
    createContext<AuthContextType | undefined>(undefined)

    export function AuthProvider({
    children,
    }: {
    children: ReactNode
    }) {

    const {
    data: user,
    isLoading,
    } = useUser()

    return (
    <AuthContext.Provider
    value={{
    user,
    isLoading,
    isAuthenticated: !!user,
    }}
    >
    {children}
    </AuthContext.Provider>
    )
    }

    export function useAuth() {

    const context = useContext(AuthContext)

    if (!context) {
    throw new Error(
    “useAuth must be used within AuthProvider”
    )
    }

    return context
    }

    ただ、私は最初はAuthContextなしで進めることをおすすめします。

    TanStack Queryが認証状態を管理してくれるからです。

    1. Loginページ

    例えば、

    src/app/login/page.tsx

    “use client”

    import { FormEvent, useState } from “react”
    import { useRouter } from “next/navigation”

    import { useLogin } from “@/queries/AuthQuery”

    export default function LoginPage() {

    const router = useRouter()

    const loginMutation = useLogin()

    const [email, setEmail] = useState(“”)
    const [password, setPassword] = useState(“”)

    const handleSubmit = async (
    e: FormEvent
    ) => {

    e.preventDefault()
    
    try {
    
      await loginMutation.mutateAsync({
        email,
        password,
      })
    
      router.push("/management")
    
    } catch (error) {
    
      console.error(error)
    
    }
    

    }

    return (

      <h1>ログイン</h1>
    
      <form onSubmit={handleSubmit}>
    
        <div>
          <label>
            メールアドレス
          </label>
    
          <input
            type="email"
            value={email}
            onChange={(e) =>
              setEmail(e.target.value)
            }
          />
        </div>
    
        <div>
          <label>
            パスワード
          </label>
    
          <input
            type="password"
            value={password}
            onChange={(e) =>
              setPassword(e.target.value)
            }
          />
        </div>
    
        <button
          type="submit"
          disabled={loginMutation.isPending}
        >
          {loginMutation.isPending
            ? "ログイン中..."
            : "ログイン"}
        </button>
    
      </form>
    
      {loginMutation.isError && (
        <p>
          ログインに失敗しました
        </p>
      )}
    
    </div>
    

    )
    }
    13. 認証が必要なページ

    例えば、

    src/app/management/page.tsx

    “use client”

    import { useRouter } from “next/navigation”

    import {
    useLogout,
    useUser,
    } from “@/queries/AuthQuery”

    export default function ManagementPage() {

    const router = useRouter()

    const {
    data: user,
    isLoading,
    isError,
    } = useUser()

    const logoutMutation = useLogout()

    if (isLoading) {
    return

    認証確認中…

    }

    if (isError || !user) {

    router.replace("/login")
    
    return null
    

    }

    const handleLogout = async () => {

    try {
    
      await logoutMutation.mutateAsync()
    
      router.replace("/login")
    
    } catch (error) {
    
      console.error(error)
    
    }
    

    }

    return (

      <h1>管理画面</h1>
    
      <p>
        ようこそ、{user.name}さん
      </p>
    
      <p>
        {user.email}
      </p>
    
      <button
        onClick={handleLogout}
        disabled={logoutMutation.isPending}
      >
        {logoutMutation.isPending
          ? "ログアウト中..."
          : "ログアウト"}
      </button>
    
    </div>
    

    )
    }
    14. ここで重要なこと

    今回の構成では、リロードしてもログイン状態が維持されます。

    例えば、

    /login
    ↓
    ログイン
    ↓
    /management
    ↓
    laravel_session Cookie
    ↓
    ブラウザがCookie保持

    その後、

    F5

    しても、

    useUser()
    ↓
    GET /api/user
    ↓
    Laravel
    ↓
    laravel_session
    ↓
    User取得

    となるので、

    ログイン状態維持

    できます。

    localStorageは必要ありません。

    今回の構成は以前のReact版よりシンプルです

    以前:

    AuthContext
    ↓
    isAuth state
    ↓
    React Query
    ↓
    API

    今回:

    TanStack Query
    ↓
    GET /api/user
    ↓
    Laravel Session Cookie
    ↓
    User

    そして、

    useUser()

    が実質的に認証状態の中心になります。

    ただし、1点だけ修正したいです

    先ほどLaravel側について、

    Route::middleware(‘web’)->group(…)

    を追加しましたが、最終構成ではいったん元の api.php に戻すことをおすすめします。

    Route::post(‘/login’, [AuthController::class, ‘login’]);

    Route::middleware(‘auth:sanctum’)->group(function () {
    Route::get(‘/user’, [AuthController::class, ‘user’]);
    Route::post(‘/logout’, [AuthController::class, ‘logout’]);
    });

    そして、

    $middleware->statefulApi();

    を維持します。

    その上でNext.js + Axios側を正しく設定します。

    次はこの構成を実際に動かすために、AuthAPI.ts → AuthQuery.ts → providers.tsx → login/page.tsx → management/page.tsx を、あなたの現在のNext.js 15プロジェクトの構成に合わせて完成版として組むのがよいです。

    はい。「PCでは画面幅の約50%、スマホでは100%」なら、Tailwindでは w-full md:w-1/2 がシンプルです。

    現在の、

    を、

    に変更してください。

    ただし、PCでも大画面になると50%では広すぎる場合があるので、管理画面ならこちらがおすすめです。

    動作 スマホ ┌────────────────────┐ │ │ │ コンテンツ │ │ │ └────────────────────┘ 100%

    PC
    ┌──────────────────────────────────────────────┐
    │ │
    │ ┌────────────────────────┐ │
    │ │ │ │
    │ │ コンテンツ │ │
    │ │ │ │
    │ └────────────────────────┘ │
    │ │
    └──────────────────────────────────────────────┘
    約50%

    md: は 768px以上で適用されます。

    もし「タブレットまでは100%、PC(1024px以上)から50%」にしたいなら、

    の方が適しています。

    今回の管理画面なら、私は lg:w-1/2 をおすすめします。

  • タスク管理アプリケーション 設計書

    1. システム概要

    本システムは、メール・パスワードによるユーザー認証を必須とし、未認証の場合はログイン画面へ自動遷移するWebアプリケーションである。日常のタスク管理に加え、タスク詳細・検索・コメント管理、コメントごとのファイル添付(ダウンロード機能付き)、コメントのドラッグ&ドロップ並び替え、およびデータベースへのCRUD操作成功時に右上に表示される通知カード(トースト)を備える。

    2. 画面設計

    ① ログイン画面

    • 表示内容: メールアドレス入力欄、パスワード入力欄、ログインボタン。
    • 機能: 認証成功時はタスク一覧画面へ遷移。未認証のユーザーが保護されたページへアクセスした場合は、自動的にログイン画面へリダイレクト。

    ② タスク一覧画面

    • 共通UI要素:
      • ヘッダー(タスク、新規、ログアウト、ヘルプ)
      • CRUD操作時の右上通知カード: タスクやコメントの作成・更新・削除(CRUD)成功時に、画面右上に「〇〇に成功しました」等のトーストカードがポップアップ表示され、数秒後に自動消滅。
    • 検索・絞り込み:
      • ステータス切替タブ(「仕掛」 / 「完了」)
      • タスク検索バー(タイトルおよびコメントを対象とした曖昧検索)
    • タスクカード一覧: カード形式(カラー分け、完了チェックボックス、タイトルリンク、期限、完了日時、各種操作ボタン)。

    ③ タスク詳細画面

    • タスク基本情報: タイトル、期限(曜日付き)、登録日時、関連リンク、「Googleカレンダーに登録」ボタン。
    • コメント・ファイル管理エリア:
      • コメント一覧(ドラッグ&ドロップ対応): コメントをドラッグ&ドロップで並び替え可能(順序は即時DB保存)。
      • コメント追加・編集・削除機能: テキスト投稿・修正・削除(CRUD実行時に右上にトースト通知表示)。
      • ファイル添付・ダウンロード機能: コメントごとにファイルを登録し、詳細画面からダウンロードが可能。
    • 共通アクション: 「戻る」ボタン。

    3. 機能要件

    3.1 認証・セキュリティ機能

    • メール・パスワード認証: ユーザー登録済みのメールアドレスとパスワードによるログイン。
    • ルーティング保護: ログイン状態を常時監視し、未認証のアクセスはログイン画面へリダイレクト。

    3.2 ユーザー通知(CRUD連動トースト)機能

    • 右上カード通知: データベースに対するCRUD(作成・読込・更新・削除)アクション成功時に、画面右上にアニメーション付きのカード(トースト)を表示。

    3.3 タスク・検索・連携機能

    • CRUD機能: タスクおよびコメントの新規作成、編集、削除、複写。
    • ステータス管理: 「仕掛中」と「完了」の切り替え(チェックボックス連動)。
    • Googleカレンダー連携: タイトルと期限を元に、Googleカレンダーのイベント作成画面を別タブで開く。
    • 検索機能: タイトルおよびコメントを対象とした曖昧検索による絞り込み。

    3.4 コメントおよびファイル・並び替え機能

    • コメントのドラッグ&ドロップ並び替え: 詳細画面内でコメントの表示順を変更し、データベースへ永続化。
    • ファイル添付・ダウンロード: コメントテーブルに保持されたファイル情報を元に、ファイルのダウンロード機能を提供。

    4. データ構造(データベース設計)

    users テーブル(ユーザー認証用)

    カラム名型説明
    idunsignedBigInteger (PK)主キー
    namestringユーザー名
    emailstring (Unique)メールアドレス(ログインID)
    passwordstringハッシュ化されたパスワード
    created_atdatetime作成日時
    updated_atdatetime更新日時

    tasks テーブル(タスク)

    カラム名型説明
    idunsignedBigInteger (PK)主キー
    user_idunsignedBigIntegerユーザーID(外部キー:users紐付け)
    titlestringタスクタイトル
    termdatetime / string期限
    linktext / string関連リンク
    is_doneboolean完了フラグ (0:仕掛, 1:完了)
    finishdaydatetime完了日時
    created_atdatetime作成日時
    updated_atdatetime更新日時

    comments テーブル(コメント・ファイル・並び順統合)

    カラム名型説明
    idunsignedBigInteger (PK)主キー
    task_idunsignedBigIntegerタスクID(外部キー)
    bodytextコメント本文
    linkstring (Nullable)リンクURL
    file_namestring (Nullable)添付ファイル名(ダウンロード用)
    file_pathstring (Nullable)添付ファイルの保存パス
    sort_orderinteger表示順序(コメントのドラッグ&ドロップ並び替え用)
    created_atdatetime作成日時
    updated_atdatetime更新日時

    5. 技術スタック

    • バックエンド: Laravel (RESTful API / Sanctum等による認証)
    • フロントエンド: React (TypeScript), Tailwind CSS, React Router, React Query
      ※Laravel上のViewでReactが動く
    • データベース: MySQL
  • 昭和天皇の戦争責任論

    歴史的議論や報道等を踏まえ、昭和天皇の戦争責任論における「肯定論」「否定論」の主な主張と、それらをまとめて整理します。                                        

    戦争責任はなかったする主張

    明治憲法は立憲君主制で天皇が政治関与することはできなかった

    明治憲法下の日本の君主制は実質的にイギリス型の立憲君主制に近く、天皇は政治的・軍事的決定を自らの独断で行うのではなく、輔弼(ほひつ:内閣や軍部などの補佐)機関の意見に従う立場にあったという主張です。

    天皇、立憲制の枠遵守 読売新聞

    東京裁判による免訴と国際法上の位置づけ

    連合国軍による極東国際軍事裁判(東京裁判)において、昭和天皇は訴追されませんでした。これは占領統治を円滑に進めるための連合国(主にGHQ/マッカーサー)側の政治的・戦略的判断によるものであり、国際法上も戦争犯罪人として裁かれなかったという事実が挙げられます。
    また、日本国憲法の施行により「象徴天皇制」へ移行し、主権が国民に移行したこと、および戦後の民主主義的プロセスを経て皇室の地位が規定されたため、過去の戦争責任は法的にすでに決着済みであるという見解もあります。
    世界史の窓

    天皇にも一部の戦争責任はあったとする主張

    最高権力者・最高指揮官としての法的・政治的責任

    立憲君主制で政治的実権がなかったとはいえ、明治憲法下においては最高元帥の地位にあり、その責任は逃れられないとする見解です。

    実際の戦争指導への関与

    戦前の昭和天皇は、下記の通り立憲君主制という建前を持ちながらも、実際には政治的影響力を行使していました。このことは、天皇が単なる立憲君主の枠を超えた実質的な権限を有していたことを裏付けるものでもあります。

    ■張作霖爆殺事件と田中義一内閣総辞職(1928~1929年)
    1928年の張作霖爆殺事件を巡り、田中義一首相は当初「厳罰に処す」と天皇に上奏したものの、軍部の反対で方針を撤回しました。1929年の最終報告の際、天皇は「前の話と違う」と田中首相を激しく叱責し、これが原因で田中内閣は総辞職に追い込まれました。天皇は後にこの発言を「若気の至り」と反省し、以降は内閣の上奏を原則として裁可する方針に転換しました。

    ■二・二六事件での反乱軍鎮圧指示(1936年)
    1936年の二・二六事件で、青年将校に同情的な本庄繁に対し、昭和天皇は「老臣を倒すのは朕の首を絞めることだ」と激怒し、「朕自ら近衛師団を率いて鎮圧する」と宣言しました。これにより軍首脳が鎮圧に動き事件は収束。天皇は後年、「自分で決断したのは二・二六事件と終戦の時だけ」と振り返っています。
    Wikipedia 昭和天皇

    ■満洲事変における不拡大方針の指示(1931年)
    関東軍の独断行動(柳条湖事件)後、若槻礼次郎内閣が不拡大方針を採った際、天皇はこれを支持し、「事件は拡大せざるよう努力するとの政府の方針は誠に結構なり」と述べました。朝鮮軍の独断越境出兵についても参謀総長を叱責し、「将来を慎め」と注意しました。ただし、既成事実化を完全に阻止することはできませんでした。
    読売新聞

    御前会議での発言

    太平洋戦争開戦前になると積極的発言があったとされています。Wikipedia 御前会議

    マッカーサーに対しての発言

    昭和天皇は、戦後、マッカーサーに対し「私は全責任をとる」と発言したとされてます。退位の意向を周辺に伝えたこともあり、天皇は退位することで戦争責任を引き受けようとしたとみられます。
    読売新聞

    まとめ

    GHQの方針もあり、法的には戦争責任は問われなかったことは確かです。
    しかしながら、「明治憲法は立憲君主制であり、天皇が政治関与することはできなかった」という断定ではなく、「形の上では立憲君主制をとっていたものの、実際には統帥権をはじめとする強大な大権が天皇に帰属し、内閣や国会が軍部や政治プロセスの統制に十分介入できない構造(あるいは輔弼の仕組みの綻び)があったため、戦争への関与や拡大を防ぎきれなかったのではないか」という、統治機構の構造的欠陥や責任を求める説もあります。
    これらのことから国の元帥として戦前の日本を戦争に導いてしまった道義的な責任の一部が天皇にもあったとするのが相当でしょう。

    本文はGemini やGrokの協力により作成しました。


  • 外部公益通報に関して懸案事項まとめ

    1.法定指針には、公益通報に要件を満たしていない外部通報まで公益通報と同様の扱いを行うのか?

    外部公益通報に関する指針は存在せず、ガイドラインに沿った見解になります。
    ※ガイドラインも外部公益通報二号までしかないがなく、三号は対象外であるが、ここでは三号も二号と同様の規定に基づくものとします。
    外部の労働者等からの通報に関するガイドライン
    (8)に公益通報以外の通報の取扱いに明記されていますが、これもあくまで「信ずるに足りる相当の理由がある場合」とされており、要件の満たさないものまで保護せよとは書かれていません。
    要するに公益通報に該当しない項目の通報(法律にないような新手の犯罪など)についても、真実相当性があれば同様の扱いをせよとのことと推測されます。

    念のためGeminiにも確認
    ——————–
    保護要件(真実相当性の要件など)を満たさない通報まで同様の扱いをすることを求めているわけではありません。あくまで「保護要件を満たした通報」に対して、法に基づく公益通報に準じた対応をとることを求めています。
    Geminiスレッド
    ※偏りがないよう Geminiの新規スレッドを使って質問しています。
    ——————–
    外部の労働者等からの通報に関するガイドライン 本文

    「窓口以外」や「報道機関等三号通報先以外」から届いたものは確認には必要ではあるが、基本的には公益通報として扱う必要はない。